#include <bits/stdc++.h>
using namespace std;
vector<long long> zyo, rz, z3;
long long mo = 1000000007;
long long dp[252521];
long long extgcd(long long a, long long b, long long &x, long long &y) {
  long long g = a;
  x = 1;
  y = 0;
  if (b != 0) g = extgcd(b, a % b, y, x), y -= (a / b) * x;
  return g;
}
long long invMod(long long a, long long m) {
  long long x, y;
  if (extgcd(a, m, x, y) == 1) return (x + m) % m;
  return 0;
}
long long cal(int a, int b) { return ((zyo[a + b] * rz[a]) % mo * rz[b]) % mo; }
int main() {
  int n, m, k;
  long long out = 0;
  cin >> n >> m >> k;
  zyo.push_back(1);
  for (int i = 0; i < 364364; i++) zyo.push_back((zyo[i] * (i + 1)) % mo);
  for (int i = 0; i < 364364; i++) rz.push_back(invMod(zyo[i], mo));
  z3.push_back(1);
  for (int i = 0; i < 364364; i++) z3.push_back((z3[i] * 3) % mo);
  dp[0] = 1;
  for (int i = 0; i < m + k; i++) {
    dp[i + 1] = dp[i] * 2;
    if (i >= m) dp[i + 1] -= cal(m, i - m);
    if (i >= k) dp[i + 1] -= cal(k, i - k);
    dp[i + 1] %= mo;
    if (dp[i + 1] < 0) dp[i + 1] += mo;
  }
  for (int i = 0; i < m + k + 1; i++) {
    out += (dp[i] * cal(i, n - 1)) % mo * z3[m + k - i];
    out %= mo;
  }
  cout << out % mo << endl;
}
