#include <bits/stdc++.h>
using namespace std;
const long long Mod = 1e9 + 7;
int n, m, K;
long long Pre[600010], Inv[600010], Pre_inv[600010], Pow[600010];
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch <= '9' && ch >= '0') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void Prepare() {
  Inv[1] = 1;
  Inv[0] = 1;
  for (int i = 2; i <= 600000; i++)
    Inv[i] = (Mod - Mod / i) * Inv[Mod % i] % Mod;
  Pre[0] = 1;
  Pre_inv[0] = 1;
  for (int i = 1; i <= 600000; i++)
    Pre[i] = Pre[i - 1] * i % Mod, Pre_inv[i] = Pre_inv[i - 1] * Inv[i] % Mod;
  Pow[0] = 1;
  for (int i = 1; i <= 600000; i++) Pow[i] = Pow[i - 1] * 3 % Mod;
}
long long Cal(int a, int b) {
  return Pre[a] * Pre_inv[b] % Mod * Pre_inv[a - b] % Mod;
}
int main() {
  Prepare();
  n = read();
  m = read();
  K = read();
  long long qwer = 1, Ans = 0;
  for (int i = 0; i <= m + K; i++) {
    long long now = Cal(n + i - 1, i) * qwer % Mod * Pow[m + K - i] % Mod;
    Ans = (Ans + now) % Mod;
    qwer = qwer * 2 % Mod;
    if (i + 1 > K) qwer -= Cal(i, K);
    if (i + 1 > m) qwer -= Cal(i, m);
    qwer = (qwer % Mod + Mod) % Mod;
  }
  cout << Ans << endl;
  return 0;
}
