#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
const long long mod = 1000000007LL;
long long fac[30005];
long long inv[30005];
long long p3[30005];
long long mpow(long long bs, long long pw) {
  if (pw == 0) return 1LL;
  long long ret = mpow(bs, pw / 2);
  ret = ret * ret % mod;
  if (pw % 2) ret = ret * bs % mod;
  return ret;
}
void pre() {
  fac[0] = inv[0] = 1LL;
  p3[0] = 1LL;
  for (long long i = 1; i <= 30000; i++) {
    fac[i] = fac[i - 1] * i % mod;
    inv[i] = mpow(fac[i], mod - 2);
    p3[i] = p3[i - 1] * 3 % mod;
  }
}
long long C(long long x, long long y) {
  if (x < y) return 0;
  return fac[x] * inv[y] % mod * inv[x - y] % mod;
}
void init() { scanf("%lld%lld%lld", &n, &m, &k); }
long long dp[1005][1005];
void process() {
  for (int i = 0; i <= m; i++) {
    for (int j = 0; j <= k; j++) {
      dp[i][j] = C(n + i + j, n) * C(i + j, i) % mod;
    }
  }
  for (int i = m; i >= 0; i--) {
    for (int j = k; j >= 0; j--) {
      dp[i][j] = (dp[i][j] - (i - 1 >= 0 ? dp[i - 1][j] : 0) -
                  (j - 1 >= 0 ? dp[i][j - 1] : 0) + mod + mod) %
                 mod;
    }
  }
  for (int i = 0; i <= m; i++) {
    for (int j = 0; j <= k; j++) {
      dp[i][j] = dp[i][j] * p3[m - i + k - j] % mod;
    }
  }
  long long ans = 0;
  for (int i = 0; i <= m; i++) {
    for (int j = 0; j <= k; j++) {
      ans = (ans + dp[i][j]) % mod;
    }
  }
  printf("%lld\n", ans);
}
int main() {
  pre();
  init();
  process();
  return 0;
}
