#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int N = 3030;
const int INV3 = MOD / 3 + 1;
long long int inv[N], pot[N], fact[N], ifact[N];
vector<long long int> unit(int g) {
  vector<long long int> ans(g + 1);
  ans[g] = ifact[g];
  return ans;
}
vector<long long int> gen(int g) {
  vector<long long int> ans(g + 1);
  ans[0] = pot[g];
  for (int i = (int)(1); i < ((int)g + 1); i++)
    ans[i] = ans[i - 1] * INV3 % MOD * inv[i] % MOD;
  return ans;
}
void add(long long int &x, long long int v) {
  x += v;
  if (x >= MOD) x -= MOD;
}
vector<long long int> operator*(const vector<long long int> &a,
                                const vector<long long int> &b) {
  int n = ((int)(a).size()), m = ((int)(b).size());
  vector<long long int> c(n + m - 1);
  for (int i = 0; i < (int)(n); i++)
    for (int j = 0; j < (int)(m); j++) add(c[i + j], a[i] * b[j] % MOD);
  return c;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  inv[1] = 1;
  for (int n = (int)(2); n < ((int)N); n++)
    inv[n] = (MOD - MOD / n) * inv[MOD % n] % MOD;
  fact[0] = 1;
  for (int n = (int)(1); n < ((int)N); n++) fact[n] = n * fact[n - 1] % MOD;
  ifact[0] = 1;
  for (int n = (int)(1); n < ((int)N); n++)
    ifact[n] = inv[n] * ifact[n - 1] % MOD;
  pot[0] = 1;
  for (int n = (int)(1); n < ((int)N); n++) pot[n] = pot[n - 1] * 3LL % MOD;
  int a, b, c;
  cin >> a >> b >> c;
  vector<long long int> p = unit(a - 1), q = gen(b), r = gen(c);
  auto res = p * q * r;
  long long int ans = 0;
  for (int i = 0; i < (int)(((int)(res).size())); i++)
    add(ans, fact[i] * res[i] % MOD);
  cout << ans << endl;
  return 0;
}
