#include <bits/stdc++.h>
using namespace std;
long long int mod = 1e9 + 7;
long long int powt[1000100];
long long int powtwo[1000100];
long long int fact[1000100];
long long int inv[1000100];
long long int invfact[1000100];
long long int dp[1000100];
long long int ans;
int n, m, k;
long long int com(int u, int v) {
  long long int ret = 1;
  ret = (ret * fact[u]) % mod;
  ret = (ret * invfact[v]) % mod;
  ret = (ret * invfact[u - v]) % mod;
  return ret;
}
int main(void) {
  cin >> n >> m >> k;
  n++;
  m++;
  k++;
  inv[1] = 1;
  invfact[0] = 1;
  fact[0] = 1;
  invfact[1] = 1;
  fact[1] = 1;
  int i, j;
  for (i = 2; i <= 1000000; i++) {
    inv[i] = ((mod - mod / i) * inv[mod % i]) % mod;
    fact[i] = (i * fact[i - 1]) % mod;
    invfact[i] = (invfact[i - 1] * inv[i]) % mod;
  }
  powt[0] = 1;
  powt[1] = 3;
  powtwo[0] = 1;
  powtwo[1] = 2;
  for (i = 2; i <= 1000000; i++) {
    powt[i] = (3 * powt[i - 1]) % mod;
    powtwo[i] = (2 * powtwo[i - 1]) % mod;
  }
  if (k > m) {
    long long int temp = k;
    k = m;
    m = temp;
  }
  for (i = 0; i <= min(k, m) - 1; i++) {
    dp[i] = powtwo[i];
  }
  if (m == k) {
    dp[min(k, m)] = powtwo[min(k, m)] - 2;
  } else {
    dp[min(k, m)] = powtwo[min(k, m)] - 1;
  }
  for (i = min(k, m) + 1; i <= max(k, m); i++) {
    dp[i] = (2 * dp[i - 1] - com(i - 1, i - 1) - com(i - 1, i - k) + mod) % mod;
  }
  for (i = max(k, m) + 1; i <= m + k - 2; i++) {
    dp[i] =
        (2 * dp[i - 1] - com(i - 1, i - k) - com(i - 1, m - 1) + 2 * mod) % mod;
  }
  for (i = 0; i <= m + k - 2; i++) {
    long long int add = 1;
    add = (add * com(n + i - 2, n - 2)) % mod;
    add = (add * dp[i]) % mod;
    add = (add * powt[m + k - i - 2]) % mod;
    ans = (ans + add) % mod;
  }
  cout << ans;
}
