#include <bits/stdc++.h>
using namespace std;
long long A, B, C;
long long beki2[600005], beki3[600005];
long long dp[600005];
long long fact[600005], fact_inv[600005];
long long pow(long long a, long long n) {
  if (n == 0) return 1;
  if (n % 2) {
    return ((a % 1000000007) * (pow(a, n - 1) % 1000000007)) % 1000000007;
  } else {
    return pow((a * a) % 1000000007, n / 2) % 1000000007;
  }
}
void make_fact() {
  long long val = 1;
  fact[0] = 1;
  for (int i = 1; i < 600005; i++) {
    val *= i;
    val %= 1000000007;
    fact[i] = val;
  }
  for (int i = 0; i < 600005; i++) {
    fact_inv[i] = pow(fact[i], 1000000007 - 2);
  }
}
long long comb(long long n, long long k) {
  long long ret = 1;
  ret *= fact[n];
  ret *= fact_inv[k], ret %= 1000000007;
  ret *= fact_inv[n - k], ret %= 1000000007;
  return ret;
}
int main(void) {
  cin >> A >> B >> C;
  if (B > C) swap(B, C);
  make_fact();
  long long mul = 1;
  for (int i = 0; i < 600005; i++) {
    beki2[i] = mul;
    mul *= 2, mul %= 1000000007;
  }
  mul = 1;
  for (int i = 0; i < 600005; i++) {
    beki3[i] = mul;
    mul *= 3, mul %= 1000000007;
  }
  for (int i = 0; i <= B; i++) dp[i] = beki2[i];
  for (int i = B; i < C; i++) {
    dp[i + 1] = (2 * dp[i] + 1000000007 - comb(i, B)) % 1000000007;
    dp[i + 1] %= 1000000007;
  }
  for (int i = C; i < 600005; i++) {
    dp[i + 1] = (2 * dp[i] + 2 * 1000000007 - (comb(i, i - C) + comb(i, B))) %
                1000000007;
    dp[i + 1] %= 1000000007;
  }
  long long ans = 0, tmp;
  for (int i = 0; i <= B + C; i++) {
    tmp =
        comb(A + i - 1, i) * dp[i] % 1000000007 * beki3[B + C - i] % 1000000007;
    ans += tmp, ans %= 1000000007;
  }
  cout << ans << endl;
  return 0;
}
