#include <bits/stdc++.h>
using namespace std;
const int maxn = 6e5 + 5;
const long long mo = 1e9 + 7;
long long fac[maxn], inv[maxn];
long long C(int n, int m) { return fac[n] * inv[m] % mo * inv[n - m] % mo; }
long long pw(long long x, long long k, long long p = ::mo) {
  long long ans = 1;
  for (; k; k >>= 1) {
    if (k & 1) ans = ans * x % mo;
    x = x * x % mo;
  }
  return ans;
}
int main() {
  fac[0] = fac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i < maxn; i++) {
    fac[i] = fac[i - 1] * i % mo;
  }
  for (int i = 2; i < maxn; i++) {
    inv[i] = (mo - mo / i) * inv[mo % i] % mo;
  }
  for (int i = 2; i < maxn; i++) {
    inv[i] = inv[i - 1] * inv[i] % mo;
  }
  long long ans = 0;
  int n, m, k;
  cin >> n >> m >> k;
  if (m > k) swap(m, k);
  long long cur = 1;
  for (int p = 0; p <= m + k; p++) {
    long long res = 0;
    res = C(n + p - 1, n - 1) * pw(3, m + k - p) % mo;
    ans += res * cur % mo;
    ans %= mo;
    cur = cur * 2 % mo;
    if (p >= m) {
      cur -= C(p, m);
      cur += mo;
      cur %= mo;
    }
    if (p >= k) {
      cur -= C(p, p - k);
      cur += mo;
      cur %= mo;
    }
  }
  cout << ans << endl;
  return 0;
}
