#include <cstdio>
#include <cstdlib>
#include <cassert>
#include <iostream>
#include <set>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <complex>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef vector<pii> vii;
typedef vector<string> vs;
const int mod = 1000000007;

ll mpow(ll x, ll n) {
  ll res = 1;
  while (n) {
    if (n & 1) res = res * x % mod;
    x = x * x % mod;
    n /= 2;
  }
  return res;
}

vl fac(1000000, 1);
vl invfac(fac.size(), 1);

ll bin (int k, int n) {
  if (k < 0 || k > n) return 0;
  return fac[n] * invfac[k] % mod * invfac[n-k] % mod;
}

int main() {
  for (int i = 2; i < fac.size(); ++i) fac[i] = fac[i-1] * i % mod;
  invfac.back() = mpow(fac.back(), mod - 2);
  for (int i = fac.size() - 2; i > 0; --i) invfac[i] = invfac[i + 1] * (i+1) % mod;
  int n,m,k;
  while (cin >> n >> m >> k) {
    ll sum = 1, res = 0;
    for (int s = 0; s <= m + k; ++s) {
      ll mul = mpow(3, m + k - s) * bin(s, s + n - 1) % mod;
//      sum = 0;
//      for (int i = max(0, s - k); i <= min(s, m); ++i) {
//        sum = (sum + bin(i, s)) % mod;
//      }
      res = (res + mul * sum) % mod;
      sum = sum * 2 - bin(min(s, m), s) + bin(max(0, s - k) - 1, s);
      if (s < m) sum += 1;
      if (s >= k) sum -= bin(s - k, s + 1);
      sum %= mod;
    }
    cout << (res % mod + mod) % mod << endl;
  }
  return 0;
}