#include <bits/stdc++.h>
using ll = long long;
const int MN = 2e3 + 2, MS = 90;
int A, B, C, p[MN], P, l[MN], nx[MN];
unsigned int dp[MS][MS][MS], f;
bool c[MN];
struct Conv {
 public:
  int V, cut, sz, to[MN], fr[MN];
  void set(int _V) {
    sz = 0;
    V = _V;
    for (cut = 1; cut * cut <= V; ++cut) fr[sz] = cut, to[cut] = sz, ++sz;
    for (int i = cut; i > 0; --i) {
      int v = V / i;
      if (v >= cut) fr[sz] = v, to[v] = sz, ++sz;
    }
  }
} A_id, B_id, C_id;
int main() {
  for (int i = 2; i < MN; ++i) {
    if (!c[i]) l[i] = P, p[P++] = i;
    for (int j = 0, k; j <= l[i] && (k = i * p[j]) < MN; ++j)
      c[k] = 1, l[k] = j;
  }
  scanf("%d%d%d", &A, &B, &C);
  A_id.set(A);
  B_id.set(B);
  C_id.set(C);
  dp[A_id.to[A]][B_id.to[B]][C_id.to[C]] = 1;
  for (int _p = 0; _p < P; ++_p) {
    for (int i = 0; i < MN; ++i) nx[i] = i / p[_p];
    for (int i = 0; i < A_id.sz; ++i)
      for (int j = 0; j < B_id.sz; ++j)
        for (int k = 0; k < C_id.sz; ++k)
          if (dp[i][j][k])
            for (int a = A_id.fr[i], ca = 0; a; a = nx[a], ++ca)
              for (int b = B_id.fr[j], cb = 0; b; b = nx[b], ++cb)
                for (int c = C_id.fr[k], cc = 0; c; c = nx[c], ++cc)
                  if (ca || cb || cc)
                    dp[A_id.to[a]][B_id.to[b]][C_id.to[c]] +=
                        dp[i][j][k] * (ca + cb + cc + 1);
  }
  for (int i = 0; i < A_id.sz; ++i)
    for (int j = 0; j < B_id.sz; ++j)
      for (int k = 0; k < C_id.sz; ++k) f += dp[i][j][k];
  printf("%d\n", f & 0x3fffffff);
  return 0;
}

### Prompt

Please create a solution in Cpp 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 ll = long long;
const int MN = 2e3 + 2, MS = 90;
int A, B, C, p[MN], P, l[MN], nx[MN];
unsigned int dp[MS][MS][MS], f;
bool c[MN];
struct Conv {
 public:
  int V, cut, sz, to[MN], fr[MN];
  void set(int _V) {
    sz = 0;
    V = _V;
    for (cut = 1; cut * cut <= V; ++cut) fr[sz] = cut, to[cut] = sz, ++sz;
    for (int i = cut; i > 0; --i) {
      int v = V / i;
      if (v >= cut) fr[sz] = v, to[v] = sz, ++sz;
    }
  }
} A_id, B_id, C_id;
int main() {
  for (int i = 2; i < MN; ++i) {
    if (!c[i]) l[i] = P, p[P++] = i;
    for (int j = 0, k; j <= l[i] && (k = i * p[j]) < MN; ++j)
      c[k] = 1, l[k] = j;
  }
  scanf("%d%d%d", &A, &B, &C);
  A_id.set(A);
  B_id.set(B);
  C_id.set(C);
  dp[A_id.to[A]][B_id.to[B]][C_id.to[C]] = 1;
  for (int _p = 0; _p < P; ++_p) {
    for (int i = 0; i < MN; ++i) nx[i] = i / p[_p];
    for (int i = 0; i < A_id.sz; ++i)
      for (int j = 0; j < B_id.sz; ++j)
        for (int k = 0; k < C_id.sz; ++k)
          if (dp[i][j][k])
            for (int a = A_id.fr[i], ca = 0; a; a = nx[a], ++ca)
              for (int b = B_id.fr[j], cb = 0; b; b = nx[b], ++cb)
                for (int c = C_id.fr[k], cc = 0; c; c = nx[c], ++cc)
                  if (ca || cb || cc)
                    dp[A_id.to[a]][B_id.to[b]][C_id.to[c]] +=
                        dp[i][j][k] * (ca + cb + cc + 1);
  }
  for (int i = 0; i < A_id.sz; ++i)
    for (int j = 0; j < B_id.sz; ++j)
      for (int k = 0; k < C_id.sz; ++k) f += dp[i][j][k];
  printf("%d\n", f & 0x3fffffff);
  return 0;
}

```