#include <bits/stdc++.h>
using namespace std;
template <class T>
void read(T &res) {
  res = 0;
  T f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    res = res * 10 + c - '0';
    c = getchar();
  }
  res *= f;
}
template <class T>
void out(T x) {
  if (x < 0) {
    x = -x;
    putchar('-');
  }
  if (x >= 10) {
    out(x / 10);
  }
  putchar('0' + x % 10);
}
const int MOD = 1000000007;
int N, M, K, fac[1000005], invfac[1000005], pw[1000005];
int s[1000005];
int inc(int a, int b) { return a + b >= MOD ? a + b - MOD : a + b; }
int mul(int a, int b) { return 1LL * a * b % MOD; }
void update(int &x, int y) { x = inc(x, y); }
int C(int n, int m) {
  if (n < m)
    return 0;
  else
    return mul(fac[n], mul(invfac[m], invfac[n - m]));
}
int fpow(int x, int c) {
  int res = 1, t = x;
  while (c) {
    if (c & 1) res = mul(res, t);
    t = mul(t, t);
    c >>= 1;
  }
  return res;
}
void Solve() {
  read(N);
  read(M);
  read(K);
  fac[0] = 1;
  for (int i = 1; i <= 1000000; ++i) fac[i] = mul(fac[i - 1], i);
  invfac[1000000] = fpow(fac[1000000], MOD - 2);
  for (int i = 999999; i >= 0; --i) invfac[i] = mul(invfac[i + 1], i + 1);
  pw[0] = 1;
  for (int i = 1; i <= 1000000; ++i) pw[i] = mul(pw[i - 1], 3);
  int l = 0, r = 0;
  s[0] = 1;
  for (int i = 1; i <= M + K; ++i) {
    int tmp = inc(mul(s[i - 1], 2), inc(C(i - 1, r + 1), MOD - C(i - 1, l)));
    if (r + 1 <= i && r + 1 <= M) {
      update(tmp, C(i, r + 1));
      ++r;
    }
    if (i - l > K) {
      update(tmp, MOD - C(i, l));
      ++l;
    }
    s[i] = tmp;
  }
  int ans = 0;
  for (int i = 0; i <= M + K; ++i) {
    int t = mul(C(N - 1 + i, N - 1), s[i]);
    t = mul(t, pw[M + K - i]);
    update(ans, t);
  }
  out(ans);
  putchar('\n');
}
int main() {
  Solve();
  return 0;
}
