#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, m, an, nx, ny, nz;
int f[2100], p[2100];
map<long long, int> a[2100];
int dfs(int nx, int ny, int nz, int t) {
  if (nx < ny) swap(nx, ny);
  if (nx < nz) swap(nx, nz);
  if (ny < nz) swap(ny, nz);
  if (!nz) return 0;
  if (nx == 1) {
    return 1;
  }
  if (!t) {
    return 1;
  }
  long long A = 1ll * nx * 2100 * 2100 + ny * 2100 + nz;
  if (a[t].count(A)) return a[t][A];
  int i, j, k, an = 0, s1, s2, s3;
  for (i = nx, s1 = 0; i; i /= p[t], s1++)
    for (j = ny, s2 = 0; j; j /= p[t], s2++)
      for (k = nz, s3 = 0; k; k /= p[t], s3++)
        an += dfs(i, j, k, t - 1) * (s1 + s2 + s3 + 1);
  a[t][A] = an;
  return an;
}
int main() {
  for (i = 2; i <= 2100 - 1; i++) {
    if (!f[i]) p[++*p] = i, f[i] = *p;
    for (j = 1; j <= *p && i * p[j] < 2100; j++) f[i * p[j]] = j;
  }
  scanf("%d%d%d", &nx, &ny, &nz);
  an = dfs(nx, ny, nz, *p);
  an %= 1073741824;
  printf("%d\n", (an + 1073741824) % 1073741824);
  return 0;
}

### Prompt

Your task is to create 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 i, j, k, n, m, an, nx, ny, nz;
int f[2100], p[2100];
map<long long, int> a[2100];
int dfs(int nx, int ny, int nz, int t) {
  if (nx < ny) swap(nx, ny);
  if (nx < nz) swap(nx, nz);
  if (ny < nz) swap(ny, nz);
  if (!nz) return 0;
  if (nx == 1) {
    return 1;
  }
  if (!t) {
    return 1;
  }
  long long A = 1ll * nx * 2100 * 2100 + ny * 2100 + nz;
  if (a[t].count(A)) return a[t][A];
  int i, j, k, an = 0, s1, s2, s3;
  for (i = nx, s1 = 0; i; i /= p[t], s1++)
    for (j = ny, s2 = 0; j; j /= p[t], s2++)
      for (k = nz, s3 = 0; k; k /= p[t], s3++)
        an += dfs(i, j, k, t - 1) * (s1 + s2 + s3 + 1);
  a[t][A] = an;
  return an;
}
int main() {
  for (i = 2; i <= 2100 - 1; i++) {
    if (!f[i]) p[++*p] = i, f[i] = *p;
    for (j = 1; j <= *p && i * p[j] < 2100; j++) f[i * p[j]] = j;
  }
  scanf("%d%d%d", &nx, &ny, &nz);
  an = dfs(nx, ny, nz, *p);
  an %= 1073741824;
  printf("%d\n", (an + 1073741824) % 1073741824);
  return 0;
}

```