#include <bits/stdc++.h>
using namespace std;
int fl[2001] = {0}, prime[2001] = {0}, A, B, C;
unordered_map<long long, int> H[600];
int dp(int a, int b, int c, int p) {
  if (!p) return 1;
  long long ha = 1ll * 2001 * 2001 * a + 1ll * 2001 * b + c, tmp;
  if (tmp = H[p][ha]) return tmp;
  int ret = 0, i, j, k, x, y, z, pp = prime[p];
  for (i = 1, x = 0; i <= a; i *= pp, ++x)
    for (j = 1, y = 0; j <= b; j *= pp, ++y)
      for (k = 1, z = 0; k <= c; k *= pp, ++z)
        ret += dp(a / i, b / j, c / k, p - 1) * (x + y + z + 1);
  return H[p][ha] = ret;
}
int main() {
  scanf("%d%d%d", &A, &B, &C);
  for (int i = 2; i < 2001; ++i) {
    if (!fl[i]) prime[++prime[0]] = i;
    for (int j = 1; j <= prime[0] && prime[j] * i < 2001; ++j) {
      fl[prime[j] * i] = 1;
      if (i % prime[j] == 0) break;
    }
  }
  printf("%d\n", (dp(A, B, C, prime[0]) % (1 << 30) + (1 << 30)) % (1 << 30));
  return 0;
}

### Prompt

Please formulate a cpp solution to the following problem:

Let's denote d(n) as the number of divisors of a positive integer n. You are given three integers a, b and c. Your task is to calculate the following sum:

<image>

Find the sum modulo 1073741824 (230).

Input

The first line contains three space-separated integers a, b and c (1 ≤ a, b, c ≤ 2000).

Output

Print a single integer — the required sum modulo 1073741824 (230).

Examples

Input

2 2 2


Output

20


Input

4 4 4


Output

328


Input

10 10 10


Output

11536

Note

For the first example.

  * d(1·1·1) = d(1) = 1; 
  * d(1·1·2) = d(2) = 2; 
  * d(1·2·1) = d(2) = 2; 
  * d(1·2·2) = d(4) = 3; 
  * d(2·1·1) = d(2) = 2; 
  * d(2·1·2) = d(4) = 3; 
  * d(2·2·1) = d(4) = 3; 
  * d(2·2·2) = d(8) = 4. 



So the result is 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
int fl[2001] = {0}, prime[2001] = {0}, A, B, C;
unordered_map<long long, int> H[600];
int dp(int a, int b, int c, int p) {
  if (!p) return 1;
  long long ha = 1ll * 2001 * 2001 * a + 1ll * 2001 * b + c, tmp;
  if (tmp = H[p][ha]) return tmp;
  int ret = 0, i, j, k, x, y, z, pp = prime[p];
  for (i = 1, x = 0; i <= a; i *= pp, ++x)
    for (j = 1, y = 0; j <= b; j *= pp, ++y)
      for (k = 1, z = 0; k <= c; k *= pp, ++z)
        ret += dp(a / i, b / j, c / k, p - 1) * (x + y + z + 1);
  return H[p][ha] = ret;
}
int main() {
  scanf("%d%d%d", &A, &B, &C);
  for (int i = 2; i < 2001; ++i) {
    if (!fl[i]) prime[++prime[0]] = i;
    for (int j = 1; j <= prime[0] && prime[j] * i < 2001; ++j) {
      fl[prime[j] * i] = 1;
      if (i % prime[j] == 0) break;
    }
  }
  printf("%d\n", (dp(A, B, C, prime[0]) % (1 << 30) + (1 << 30)) % (1 << 30));
  return 0;
}

```