#include <bits/stdc++.h>
const int MOD = 1 << 30;
using LL = long long;
std::unordered_map<LL, unsigned int> cache;
LL encode(int a, int b, int c, int pi) {
  return LL(a) << 33 | LL(b) << 22 | LL(c) << 11 | pi;
}
std::vector<int> primes;
void prepare_primes(int n) {
  std::vector<int> mark(n + 1);
  for (int i = 2; i <= n; ++i) {
    if (!mark[i]) primes.emplace_back(i);
    for (int p : primes) {
      if (i * p > n) break;
      mark[i * p] = true;
      if (i % p == 0) break;
    }
  }
}
unsigned int solve(int a, int b, int c, int pi) {
  if (pi >= primes.size()) return 1;
  if (a > b) std::swap(a, b);
  if (a > c) std::swap(a, c);
  if (b > c) std::swap(b, c);
  int p = primes[pi];
  if (c < p) return 1;
  if (b < p) b = 1;
  if (a < p) a = 1;
  LL state = encode(a, b, c, pi);
  if (cache.count(state)) return cache[state];
  unsigned int ret = 0;
  for (int i = 0, ap = 1; a >= ap; ++i, ap *= p) {
    for (int j = 0, bp = 1; b >= bp; ++j, bp *= p) {
      for (int k = 0, cp = 1; c >= cp; ++k, cp *= p) {
        ret += (i + j + k + 1) * solve(a / ap, b / bp, c / cp, pi + 1);
      }
    }
  }
  return cache[state] = ret;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::istream& reader = std::cin;
  prepare_primes(2000);
  int a, b, c;
  reader >> a >> b >> c;
  printf("%u\n", solve(a, b, c, 0) % MOD);
}

### Prompt

Please formulate 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>
const int MOD = 1 << 30;
using LL = long long;
std::unordered_map<LL, unsigned int> cache;
LL encode(int a, int b, int c, int pi) {
  return LL(a) << 33 | LL(b) << 22 | LL(c) << 11 | pi;
}
std::vector<int> primes;
void prepare_primes(int n) {
  std::vector<int> mark(n + 1);
  for (int i = 2; i <= n; ++i) {
    if (!mark[i]) primes.emplace_back(i);
    for (int p : primes) {
      if (i * p > n) break;
      mark[i * p] = true;
      if (i % p == 0) break;
    }
  }
}
unsigned int solve(int a, int b, int c, int pi) {
  if (pi >= primes.size()) return 1;
  if (a > b) std::swap(a, b);
  if (a > c) std::swap(a, c);
  if (b > c) std::swap(b, c);
  int p = primes[pi];
  if (c < p) return 1;
  if (b < p) b = 1;
  if (a < p) a = 1;
  LL state = encode(a, b, c, pi);
  if (cache.count(state)) return cache[state];
  unsigned int ret = 0;
  for (int i = 0, ap = 1; a >= ap; ++i, ap *= p) {
    for (int j = 0, bp = 1; b >= bp; ++j, bp *= p) {
      for (int k = 0, cp = 1; c >= cp; ++k, cp *= p) {
        ret += (i + j + k + 1) * solve(a / ap, b / bp, c / cp, pi + 1);
      }
    }
  }
  return cache[state] = ret;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::istream& reader = std::cin;
  prepare_primes(2000);
  int a, b, c;
  reader >> a >> b >> c;
  printf("%u\n", solve(a, b, c, 0) % MOD);
}

```