#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int n, m, k;
int f[4][1010101];
int pow1[1010101], pow2[1010101];
int g[4][4][1010101];
int fac[1010101], rev[1010101], ifac[1010101];
int c(int a, int b) {
  long long ret = fac[b];
  ret = ret * ifac[a];
  ret %= MOD;
  ret = ret * ifac[b - a];
  ret %= MOD;
  return (int)ret;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  pow1[0] = fac[0] = ifac[0] = rev[0] = pow2[0] = 1;
  ifac[1] = rev[1] = 1;
  for (int i = 1; i <= n + m + k; ++i) {
    pow1[i] = pow1[i - 1] * 3ll % MOD;
    pow2[i] = pow2[i - 1] * 2 % MOD;
    fac[i] = fac[i - 1] * 1ll * i % MOD;
    if (i >= 2) {
      rev[i] = MOD - 1ll * (MOD / i) * rev[MOD % i] % MOD;
      ifac[i] = 1ll * ifac[i - 1] * rev[i] % MOD;
    }
  }
  int ans = 0;
  for (int i = 0; i <= m; ++i) {
    ans += 1ll * pow2[i] * c(i, i + n - 1) % MOD * pow1[m + k - i] % MOD;
    if (ans >= MOD) ans -= MOD;
  }
  int lst = pow2[m];
  for (int i = m + 1; i <= m + k; ++i) {
    lst = lst << 1;
    lst -= c(m, i - 1);
    if (lst >= MOD) lst -= MOD;
    if (i > k) lst -= c(i - k - 1, i - 1);
    while (lst < 0) lst += MOD;
    while (lst >= MOD) lst -= MOD;
    ans += 1ll * lst * c(i, i + n - 1) % MOD * pow1[m + k - i] % MOD;
    if (ans >= MOD) ans -= MOD;
  }
  printf("%d\n", ans);
  return 0;
}
