#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline void chmin(A &a, B b) {
  if (a > b) a = b;
}
template <typename A, typename B>
inline void chmax(A &a, B b) {
  if (a < b) a = b;
}
const long long mod = 1000000007;
const long long MAX = 1000000;
long long fact[MAX], inv[MAX];
long long mpow(long long n, long long m) {
  long long ret = 1;
  while (m) {
    if (m & 1) ret = ret * n % mod;
    n = n * n % mod;
    m >>= 1;
  }
  return ret;
}
long long C(long long n, long long k) {
  return fact[n] * inv[k] % mod * inv[n - k] % mod;
}
long long pow3[MAX];
signed main() {
  fact[0] = 1;
  for (long long i = 1; i < MAX; i++) fact[i] = fact[i - 1] * i % mod;
  inv[MAX - 1] = mpow(fact[MAX - 1], mod - 2);
  for (long long i = MAX - 2; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
  pow3[0] = 1;
  for (long long i = 1; i < MAX; i++) pow3[i] = pow3[i - 1] * 3 % mod;
  long long N, M, K;
  cin >> N >> M >> K;
  long long ans = 0;
  long long curL = 0, curR = 1;
  for (long long i = 0; i <= M + K; i++) {
    ans =
        (ans + (curR - curL + mod) * C(N - 1 + i, i) % mod * pow3[M + K - i]) %
        mod;
    curL *= 2;
    curR *= 2;
    if (i >= M) curR = (curR - C(i, M) + mod) % mod;
    if (i >= K) curL = (curL + C(i, i - K)) % mod;
  }
  cout << ans << endl;
  return 0;
}
