#include <bits/stdc++.h>
using namespace std;
int Fact[1000005], P3[1000005], Inv[1000005], Dp[1000005];
int put(int a, int b) {
  int rez = 1;
  for (int i = 0; (1 << i) <= b; i++) {
    if ((1 << i) & b) rez = (1LL * rez * a) % 1000000007;
    a = (1LL * a * a) % 1000000007;
  }
  return rez;
}
int comb(int n, int k) {
  if (k > n) return 0;
  int rez = (1LL * Fact[n] * Inv[k]) % 1000000007;
  rez = (1LL * rez * Inv[n - k]) % 1000000007;
  return rez;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  Fact[0] = 1;
  P3[0] = 1;
  for (int i = 1; i <= n + m + k + 1; i++) {
    Fact[i] = (1LL * Fact[i - 1] * i) % 1000000007;
    P3[i] = (3LL * P3[i - 1]) % 1000000007;
  }
  Inv[n + m + k + 1] = put(Fact[n + k + k + 1], 1000000007 - 2);
  for (int i = n + m + k; i >= 0; i--)
    Inv[i] = (1LL * Inv[i + 1] * (i + 1)) % 1000000007;
  Dp[0] = 1;
  for (int i = 1; i <= m + k; i++) {
    Dp[i] = (Dp[i - 1] - comb(i - 1, m) + 1000000007) % 1000000007;
    Dp[i] =
        (1LL * Dp[i] + Dp[i - 1] - comb(i - 1, k) + 1000000007) % 1000000007;
    if (Dp[i] == 0) break;
  }
  int rez = 0;
  for (int i = n + 1; i <= n + m + k + 1; i++) {
    int val = comb(i - 2, n - 1);
    val = (1LL * val * P3[n + m + k + 1 - i]) % 1000000007;
    val = (1LL * val * Dp[i - n - 1]) % 1000000007;
    rez = (rez + val) % 1000000007;
  }
  cout << rez << "\n";
  return 0;
}
