#include <bits/stdc++.h>
using namespace ::std;
const long long mod = 1e9 + 7;
const long long inf = 1e17 + 500;
const long long maxn = 1e6 + 500;
long long fac[maxn];
long long rfac[maxn];
long long poww(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = (ans * a) % mod;
    }
    a = (a * a) % mod;
    b >>= 1;
  }
  return ans;
}
long long ent(long long n, long long k) {
  if (k < 0 || k > n) return 0;
  return (((fac[n] * rfac[k]) % mod) * rfac[n - k]) % mod;
}
long long find_suf(long long n, long long l) {
  long long res = 0;
  for (long long i = l; i <= n; i++) {
    res += (ent(i - 1, l - 1) * poww(2, n - i)) % mod;
  }
  return res % mod;
}
long long find_pre(long long n, long long r) { return find_suf(n, n - r); }
long long find_sum(long long s, long long l, long long r) {
  if (l == 0) return find_pre(s, r);
  return (find_pre(s, r) - find_pre(s, l - 1) + mod) % mod;
}
int main() {
  fac[0] = 1;
  rfac[0] = 1;
  for (long long i = 1; i < maxn; i++) {
    fac[i] = (fac[i - 1] * i) % mod;
    rfac[i] = poww(fac[i], mod - 2);
  }
  long long ans = 0;
  long long n, m, k;
  cin >> n >> m >> k;
  n--;
  for (long long s = 0; s <= m + k; s++) {
    long long res = find_sum(s, max(0LL, s - m), min(k, s));
    res %= mod;
    res *= ent(n + s, s);
    res %= mod;
    res *= poww(3, m + k - s);
    res %= mod;
    ans += res;
  }
  cout << ans % mod;
}
