#include <bits/stdc++.h>
using namespace std;
const int NMAX = 3e5 + 5;
const int mod = 1e9 + 7;
int N, M, K;
int fct[3 * NMAX], ifct[3 * NMAX], p3[3 * NMAX];
int cnt[3 * NMAX];
int power(int x, int y) {
  if (y == 0) return 1;
  int ans = power((1LL * x * x) % mod, y >> 1);
  if (y & 1) ans = (1LL * ans * x) % mod;
  return ans;
}
void pre(int N) {
  fct[0] = 1;
  for (int i = 1; i <= N; i++) fct[i] = (1LL * fct[i - 1] * i) % mod;
  ifct[N] = power(fct[N], mod - 2);
  for (int i = N - 1; i >= 0; i--)
    ifct[i] = (1LL * ifct[i + 1] * (i + 1)) % mod;
  p3[0] = 1;
  for (int i = 1; i <= N; i++) p3[i] = (3LL * p3[i - 1]) % mod;
}
int C(int N, int K) {
  if (N < 0 || K < 0 || N < K) return 0;
  int ans = fct[N];
  ans = (1LL * ans * ifct[K]) % mod;
  ans = (1LL * ans * ifct[N - K]) % mod;
  return ans;
}
int main() {
  pre(9e5);
  scanf("%d%d%d", &N, &M, &K);
  cnt[0] = 1;
  int lstst = 0, lstdr = 0, lstans = 1;
  for (int i = 1; i <= M + K; i++) {
    int st = max(0, i - K);
    int dr = min(M, i);
    int ans = (2LL * lstans + C(i - 1, lstst - 1) - C(i - 1, lstdr)) % mod;
    while (lstst < st) {
      ans = (ans - C(i, lstst) + mod) % mod;
      lstst++;
    }
    lstdr++;
    while (lstdr <= dr) {
      ans = (ans + C(i, lstdr)) % mod;
      lstdr++;
    }
    lstst = st, lstdr = dr, lstans = ans;
    cnt[i] = ans;
  }
  int ans = 0;
  for (int i = N; i <= N + M + K; i++) {
    int sol = (1LL * C(i - 1, N - 1) * cnt[i - N]) % mod;
    sol = (1LL * sol * p3[N + M + K - i]) % mod;
    ans = (ans + sol) % mod;
  }
  printf("%d\n", ans);
  return 0;
}
