#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, m, k, po[2][1000005];
int qpow(int a, int b) {
  int ans = 1, base = a;
  while (b) {
    if (b & 1) ans = 1ll * ans * base % mod;
    base = 1ll * base * base % mod;
    b >>= 1;
  }
  return ans;
}
int fac[1000005], inv[1000005], ans;
int C(int n, int m) { return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod; }
int main() {
  int i, j, x, l, r, mid;
  fac[0] = po[0][0] = po[1][0] = 1;
  for (i = 1; i <= 1000005 - 5; i++)
    fac[i] = 1ll * fac[i - 1] * i % mod, po[0][i] = po[0][i - 1] * 2ll % mod,
    po[1][i] = po[1][i - 1] * 3ll % mod;
  inv[1000005 - 5] = qpow(fac[1000005 - 5], mod - 2);
  for (i = 1000005 - 6; i >= 0; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
  n = read(), m = read(), k = read();
  int las = 1;
  for (i = 0; i <= m + k; i++) {
    ans =
        (ans + 1ll * C(n + i - 1, n - 1) * po[1][m + k - i] % mod * las % mod) %
        mod;
    if (i + 1 <= m && i + 1 <= k)
      las = las * 2ll % mod;
    else {
      if (i + 1 <= k)
        las = ((las * 2ll - C(i, m)) % mod + mod) % mod;
      else if (i + 1 <= m)
        las = ((las * 2ll - C(i, i - k)) % mod + mod) % mod;
      else
        las = ((las * 2ll - C(i, i - k)) % mod + mod - C(i, m)) % mod;
    }
  }
  printf("%d\n", ans);
  return 0;
}
