#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
inline void ModMul(int& x, int y) { x = (1LL * x * y) % MOD; }
inline int GetModMul(int x, int y) {
  ModMul(x, y);
  return x;
}
inline void ModSum(int& x, int y) {
  x += y;
  if (x >= MOD) {
    x -= MOD;
  }
  if (x < 0) {
    x += MOD;
  }
}
inline int GetModSum(int x, int y) {
  ModSum(x, y);
  return x;
}
inline int GetBinaryPow(int x, int pw) {
  int r = 1;
  while (pw > 0) {
    if (pw & 1) {
      ModMul(r, x);
    }
    ModMul(x, x);
    pw >>= 1;
  }
  return r;
}
inline int GetInv(int x) { return GetBinaryPow(x, MOD - 2); }
const int MAX_N = 3e5;
const int MAX_FACT = 2 * MAX_N + 100;
vector<int> fact(MAX_FACT);
vector<int> invFact(MAX_FACT);
void BuildFact() {
  fact[0] = 1;
  for (int i = 1; i < MAX_FACT; ++i) {
    fact[i] = fact[i - 1];
    ModMul(fact[i], i);
  }
  for (int i = 0; i < MAX_FACT; ++i) {
    invFact[i] = GetInv(fact[i]);
  }
}
inline int GetC(int n, int k) {
  if (k > n) {
    return 0;
  }
  int r = fact[n];
  ModMul(r, invFact[k]);
  ModMul(r, invFact[n - k]);
  return r;
}
inline int GetCoeff(int n, int m) {
  if (n == 0) {
    return 0;
  }
  return GetC(n + m - 1, n - 1);
}
int main() {
  BuildFact();
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, m, k;
  cin >> n >> m >> k;
  vector<int> pw3(m + k + 1);
  pw3[0] = 1;
  for (int i = 1; i <= m + k; ++i) {
    pw3[i] = pw3[i - 1];
    ModMul(pw3[i], 3);
  }
  int l = 0;
  int r = 0;
  int sum = 1;
  int result = 0;
  for (int s = 0; s <= m + k; ++s) {
    const int cl = max(0, s - k);
    const int cr = min(m, s);
    if (l == r) {
      sum = 0;
      for (int i = cl; i <= cr; ++i) {
        ModSum(sum, GetC(s, i));
      }
    } else {
      ModMul(sum, 2);
      ++l;
      while (r < cr) {
        ModSum(sum, GetC(s, r + 1));
        ++r;
      }
      while (l > cl) {
        ModSum(sum, GetC(s, l - 1));
        --l;
      }
      while (r > cr) {
        ModSum(sum, -GetC(s, r));
        --r;
      }
      while (l < cl) {
        ModSum(sum, -GetC(s, l));
        ++l;
      }
    }
    int curResult = GetC(s + (n - 1), n - 1);
    ModMul(curResult, pw3[m + k - s]);
    ModMul(curResult, sum);
    ModSum(result, curResult);
  }
  cout << result << endl;
  return 0;
}
