#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int K = 20, MOD = 1e9 + 7, C = 31622;
const double PI = acos(-1);
vector<complex<double> > w[K + 1];
int lg[(1 << K) + 1];
void fft(vector<complex<double> >& a, int inv) {
  int n = a.size();
  int j = 0;
  for (int i = 1; i < n; i++) {
    int k = n >> 1;
    for (; j & k; k >>= 1) {
      j ^= k;
    }
    j ^= k;
    if (i < j) {
      swap(a[i], a[j]);
    }
  }
  complex<double> even, odd;
  for (int len = 2; len <= n; len <<= 1) {
    int m = lg[len];
    for (int i = 0; i < n; i += len) {
      for (int j = 0; j < len / 2; j++) {
        even = a[i + j], odd = a[i + j + len / 2];
        if (inv) {
          even /= 2, odd /= 2;
          odd *= w[m][j == 0 ? 0 : len - j];
        } else {
          odd *= w[m][j];
        }
        a[i + j] = even + odd;
        a[i + j + len / 2] = even - odd;
      }
    }
  }
}
vector<long long> mul(const vector<int>& a, const vector<int>& b) {
  vector<complex<double> > fa((a).begin(), (a).end()),
      fb((b).begin(), (b).end());
  int n = 1, need = a.size() + b.size();
  while (n < need) {
    n <<= 1;
  }
  fa.resize(n);
  fb.resize(n);
  fft(fa, 0);
  fft(fb, 0);
  for (int i = 0; i < n; i++) {
    fa[i] *= fb[i];
  }
  fft(fa, 1);
  vector<long long> res(need - 1);
  for (int i = 0; i < need - 1; i++) {
    res[i] = llround(fa[i].real());
  }
  return res;
}
vector<int> conv(const vector<int>& a, const vector<int>& b) {
  int A = a.size(), B = b.size();
  vector<int> a1(A), a2(A);
  for (int i = 0; i < A; i++) {
    a1[i] = a[i] % C;
    a2[i] = a[i] / C;
  }
  vector<int> b1(B), b2(B);
  for (int i = 0; i < B; i++) {
    b1[i] = b[i] % C;
    b2[i] = b[i] / C;
  }
  vector<long long> c11 = mul(a1, b1);
  vector<long long> c12 = mul(a1, b2);
  vector<long long> c21 = mul(a2, b1);
  vector<long long> c22 = mul(a2, b2);
  vector<int> res(A + B - 1);
  for (int i = 0; i < A + B - 1; i++) {
    res[i] = c11[i] % MOD;
    res[i] += (long long)C * ((c12[i] + c21[i]) % MOD) % MOD;
    if (res[i] >= MOD) {
      res[i] -= MOD;
    }
    res[i] += (long long)C * C * (c22[i] % MOD) % MOD;
    if (res[i] >= MOD) {
      res[i] -= MOD;
    }
  }
  return res;
}
void pre_fft() {
  for (int i = 2; i <= 1 << K; i++) {
    lg[i] = lg[i / 2] + 1;
  }
  for (int i = 0; i <= K; i++) {
    w[i].resize(1 << i);
    double ang = 2 * PI / (1 << i);
    for (int j = 0; j < 1 << i; j++) {
      w[i][j] = complex<double>(cos(j * ang), sin(j * ang));
    }
  }
}
const int N = 6e5 + 123;
int fact[N], rev[N], pw[N];
int binpow(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) {
      res = (long long)res * x % MOD;
    }
    x = (long long)x * x % MOD;
    y /= 2;
  }
  return res;
}
int binomial(int n, int k) {
  if (k > n) {
    return 0;
  }
  return ((long long)fact[n] * rev[k] % MOD) * rev[n - k] % MOD;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  pre_fft();
  fact[0] = rev[0] = pw[0] = 1;
  for (int i = 1; i < N; i++) {
    fact[i] = (long long)fact[i - 1] * i % MOD;
    rev[i] = (long long)rev[i - 1] * binpow(i, MOD - 2) % MOD;
    pw[i] = (long long)pw[i - 1] * 3 % MOD;
  }
  int n, m, k;
  cin >> n >> m >> k;
  vector<int> a(m + 1), b(k + 1);
  for (int i = 0; i <= m; i++) {
    a[i] = rev[i];
  }
  for (int i = 0; i <= k; i++) {
    b[i] = rev[i];
  }
  vector<int> c = conv(a, b);
  int res = 0;
  for (int i = 0; i <= m + k; i++) {
    int tmp = (long long)pw[m + k - i] * binomial(n - 1 + i, n - 1) % MOD;
    tmp = (long long)tmp * fact[i] % MOD;
    tmp = (long long)tmp * c[i] % MOD;
    res += tmp;
    if (res >= MOD) {
      res -= MOD;
    }
  }
  cout << res;
}
