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.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
template <typename T>
T nextInt() {
  T x = 0, p = 1;
  char ch;
  do {
    ch = getchar();
  } while (ch <= ' ');
  if (ch == '-') {
    p = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * p;
}
const int maxN = (int)1e5 + 10;
const int maxHash = 1 << 22;
const int INF = (int)1e9;
const int mod = 1 << 30;
const long long LLINF = (long long)1e18;
const long double pi = acos(-1.0);
int prv[2280];
struct state {
  int a, b, c, p;
  long long res;
  long long h;
  state() {}
  state(int a, int b, int c, int p, long long res = 0LL)
      : a(a), b(b), c(c), p(p), res(res) {
    h = 31LL * a + 31LL * 53LL * b + 31LL * 53LL * 71LL * c +
        31LL * 53LL * 71LL * 83LL * p;
    h &= maxHash - 1;
  }
};
vector<state> hashes[maxHash];
void add(int a, int b, int c, int d, long long res) {
  state x = state(a, b, c, d, res);
  hashes[x.h].push_back(x);
}
int find(int a, int b, int c, int d) {
  state x = state(a, b, c, d);
  int h = x.h;
  for (auto s : hashes[h]) {
    if (s.a == a && s.b == b && s.c == c && s.p == d) {
      return s.res;
    }
  }
  return -1;
}
long long dp(int a, int b, int c, int p) {
  if (a < 1 || b < 1 || c < 1 || p < 1) return 1;
  if (a == 1 && b == 1 && c == 1) return 1;
  int x = find(a, b, c, p);
  if (x != -1) {
    return x;
  }
  int q = prv[p];
  long long res = 0LL;
  int xx = 1;
  for (int x = 0; xx <= a; ++x, xx *= p) {
    int yy = 1;
    for (int y = 0; yy <= b; ++y, yy *= p) {
      int zz = 1;
      for (int z = 0; zz <= c; ++z, zz *= p) {
        res += (dp(a / xx, b / yy, c / zz, q) * (x + y + z + 1)) % mod;
        if (res >= mod) res -= mod;
      }
    }
  }
  add(a, b, c, p, res);
  return res;
}
int main() {
  for (int i = 1999; i >= 2;) {
    for (int j = i - 1;; --j) {
      bool prime = true;
      for (int k = 2; k * k <= j; ++k) {
        if (j % k == 0) {
          prime = false;
        }
      }
      if (prime && j != 1) {
        prv[i] = j;
        i = j;
        break;
      }
    }
  }
  int a, b, c;
  cin >> a >> b >> c;
  cout << dp(a, b, c, 1999) << '\n';
  return 0;
}