#include <bits/stdc++.h>
using namespace std;
int const N = 3e3 + 41;
int const MOD = 1e9 + 7;
int n, m, k;
int f[N], invf[N];
int th[N];
int ans;
void add(int &a, int b) {
  a += b;
  while (a >= MOD) a -= MOD;
  while (a < 0) a += MOD;
}
int mul(int a, int b) { return (long long)a * b % MOD; }
int bp(int x, int d) {
  int res = 1;
  while (d) {
    if (d & 1) res = mul(res, x);
    d >>= 1;
    x = mul(x, x);
  }
  return res;
}
int inv(int x) { return bp(x, MOD - 2); }
void init() {
  f[0] = 1;
  for (int i = 1; i < N; ++i) f[i] = mul(f[i - 1], i);
  for (int i = 0; i < N; ++i) invf[i] = inv(f[i]);
  th[0] = 1;
  for (int i = 1; i < N; ++i) th[i] = mul(th[i - 1], 3);
}
int getc(int n, int k) {
  if (k > n) return 0;
  int res = f[n];
  res = mul(res, invf[k]);
  res = mul(res, invf[n - k]);
  return res;
}
int dg[N];
int getg(int x) {
  if (dg[x] != -1) return dg[x];
  int res = 0;
  for (int i = 0; i < k + 1; ++i) {
    int y = x - i;
    if (y > m) continue;
    int v = getc(x, i);
    add(res, v);
  }
  dg[x] = res;
  return res;
}
void solve() {
  int x = n + m + k;
  memset(dg, 255, sizeof(dg));
  for (int i = 1; i < x + 1; ++i) {
    int f = getc(i - 1, n - 1);
    int g = getg(i - n);
    int t = th[x - i];
    add(ans, mul(f, mul(g, t)));
  }
}
int main() {
  init();
  scanf("%d %d %d", &n, &m, &k);
  solve();
  printf("%d\n", ans);
  return 0;
}
