#include <bits/stdc++.h>
using namespace std;
const int maxn = 2008, mod = 1 << 30;
unordered_map<long long, int> M[308];
int A, B, C, p[maxn], tot;
long long ans;
bool isp[maxn];
void GetPrime() {
  fill(isp + 2, isp + 2001, true);
  for (int i = 2; i <= 2000; i++) {
    if (isp[i]) p[tot++] = i;
    for (int j = 0; j < tot && p[j] * i <= 2000; j++) {
      isp[p[j] * i] = false;
      if (i % p[j] == 0) break;
    }
  }
}
long long Calc(int a, int b, int c, int np) {
  if (np == -1) return 1;
  int r = p[np];
  long long rep = 0;
  long long hh = 2003ll * 2003ll * a + 2003ll * b + c;
  if (rep = M[np][hh]) return rep;
  for (int i = 1, x = 0; i <= a; i *= r, x++)
    for (int j = 1, y = 0; j <= b; j *= r, y++)
      for (int k = 1, z = 0; k <= c; k *= r, z++)
        rep += Calc(a / i, b / j, c / k, np - 1) * (x + y + z + 1);
  return M[np][hh] = rep;
}
int main() {
  scanf("%d%d%d", &A, &B, &C);
  GetPrime();
  printf("%d", (Calc(A, B, C, tot - 1) % mod + mod) % (1 << 30));
  return 0;
}

### Prompt

Create a solution in cpp for 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 maxn = 2008, mod = 1 << 30;
unordered_map<long long, int> M[308];
int A, B, C, p[maxn], tot;
long long ans;
bool isp[maxn];
void GetPrime() {
  fill(isp + 2, isp + 2001, true);
  for (int i = 2; i <= 2000; i++) {
    if (isp[i]) p[tot++] = i;
    for (int j = 0; j < tot && p[j] * i <= 2000; j++) {
      isp[p[j] * i] = false;
      if (i % p[j] == 0) break;
    }
  }
}
long long Calc(int a, int b, int c, int np) {
  if (np == -1) return 1;
  int r = p[np];
  long long rep = 0;
  long long hh = 2003ll * 2003ll * a + 2003ll * b + c;
  if (rep = M[np][hh]) return rep;
  for (int i = 1, x = 0; i <= a; i *= r, x++)
    for (int j = 1, y = 0; j <= b; j *= r, y++)
      for (int k = 1, z = 0; k <= c; k *= r, z++)
        rep += Calc(a / i, b / j, c / k, np - 1) * (x + y + z + 1);
  return M[np][hh] = rep;
}
int main() {
  scanf("%d%d%d", &A, &B, &C);
  GetPrime();
  printf("%d", (Calc(A, B, C, tot - 1) % mod + mod) % (1 << 30));
  return 0;
}

```