#include <bits/stdc++.h>
using namespace std;
const int N = 2000 + 19, oo = (1 << 30) - 1;
map<long long, unsigned int> M[N];
int p[N], v[N], a, b, c, cnt;
unsigned int DFS(int a, int b, int c, int x) {
  if (a > b) swap(a, b);
  if (b > c) swap(b, c);
  if (a > b) swap(a, b);
  if (c == 1) return 1;
  if (x == 0) return 1;
  long long A = a * N * N + b * N + c;
  unsigned int res = 0;
  if (M[x].count(A)) return M[x][A];
  for (int i = a, c1 = 0; i; i /= p[x], c1++)
    for (int j = b, c2 = 0; j; j /= p[x], c2++)
      for (int k = c, c3 = 0; k; k /= p[x], c3++)
        res += DFS(i, j, k, x - 1) * (c1 + c2 + c3 + 1);
  return M[x][A] = res;
}
int main() {
  scanf("%d%d%d", &a, &b, &c);
  for (int i = 2; i < N; i++)
    if (!v[i]) {
      p[++*p] = i;
      for (int j = i * i; j < N; j += i) v[j] = 1;
    }
  printf("%d\n", DFS(a, b, c, *p) & oo);
}

### Prompt

Generate 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;
const int N = 2000 + 19, oo = (1 << 30) - 1;
map<long long, unsigned int> M[N];
int p[N], v[N], a, b, c, cnt;
unsigned int DFS(int a, int b, int c, int x) {
  if (a > b) swap(a, b);
  if (b > c) swap(b, c);
  if (a > b) swap(a, b);
  if (c == 1) return 1;
  if (x == 0) return 1;
  long long A = a * N * N + b * N + c;
  unsigned int res = 0;
  if (M[x].count(A)) return M[x][A];
  for (int i = a, c1 = 0; i; i /= p[x], c1++)
    for (int j = b, c2 = 0; j; j /= p[x], c2++)
      for (int k = c, c3 = 0; k; k /= p[x], c3++)
        res += DFS(i, j, k, x - 1) * (c1 + c2 + c3 + 1);
  return M[x][A] = res;
}
int main() {
  scanf("%d%d%d", &a, &b, &c);
  for (int i = 2; i < N; i++)
    if (!v[i]) {
      p[++*p] = i;
      for (int j = i * i; j < N; j += i) v[j] = 1;
    }
  printf("%d\n", DFS(a, b, c, *p) & oo);
}

```