#include <bits/stdc++.h>
using namespace std;
const int p = 1000000000 + 7;
const int maxn = 100000 * 3 + 5;
long long n, m, k;
long long p1[maxn * 2], p2[maxn * 2];
long long f[maxn * 2];
long long pw3[maxn * 2];
long long pw(long long x, long long y) {
  long long ans = 1;
  while ((bool)y) {
    if ((bool)(y & 1)) {
      ans = ans * x % p;
    }
    x = x * x % p;
    y = y >> 1;
  }
  return ans;
}
long long c(long long x, long long y) {
  if ((x < y) || (y < 0)) return 0;
  return p1[x] * p2[y] % p * p2[x - y] % p;
}
void solve() {
  long long b1, b2, b3, b4;
  long long ans;
  scanf("%lld%lld%lld", &n, &m, &k);
  f[0] = 1;
  if (m > k) swap(m, k);
  for (b1 = 1; b1 <= m + k; b1++) {
    f[b1] = (f[b1 - 1] * 2 - (c(b1 - 1, m) + c(b1 - 1, k)) % p + p) % p;
  }
  ans = 0;
  for (b1 = n; b1 <= n + m + k; b1++) {
    ans =
        (ans + f[b1 - n] * c(b1 - 1, n - 1) % p * pw3[n + m + k - b1] % p) % p;
  }
  printf("%lld\n", ans);
}
int main() {
  long long b1, b2, b3, b4;
  p1[0] = 1;
  for (b1 = 1; b1 < maxn * 2; b1++) {
    p1[b1] = p1[b1 - 1] * b1 % p;
  }
  p2[maxn * 2 - 1] = pw(p1[maxn * 2 - 1], p - 2);
  for (b1 = maxn * 2 - 1; b1 >= 1; b1--) {
    p2[b1 - 1] = p2[b1] * b1 % p;
  }
  pw3[0] = 1;
  for (b1 = 1; b1 < maxn * 2; b1++) {
    pw3[b1] = pw3[b1 - 1] * 3 % p;
  }
  solve();
}
