#include <bits/stdc++.h>
using namespace std;
const int N = 9e5 + 10;
const long long mod = 1e9 + 7;
int n, m, k;
long long fac[N] = {1}, inv[N] = {1, 1}, pw[N] = {1}, ans, j = 1;
template <typename I>
inline void read(I &ot) {
  I ch = getchar(), x = 0, f = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  ot = x * f;
}
template <typename I, typename... U>
inline void read(I &x, U &...y) {
  read(x);
  read(y...);
}
template <typename I>
inline void swp(I &a, I &b) {
  a ^= b;
  b ^= a;
  a ^= b;
}
inline long long C(int nn, int mm) {
  return fac[nn] * inv[mm] % mod * inv[nn - mm] % mod;
}
int main() {
  read(n, m, k);
  if (k > m) swp(k, m);
  for (int i = 2; i <= n + k + m; i++)
    inv[i] = (mod - mod / i) * inv[mod % i] % mod;
  for (int i = 1; i <= n + k + m; i++)
    fac[i] = fac[i - 1] * i % mod, (inv[i] *= inv[i - 1]) %= mod,
    pw[i] = pw[i - 1] * 3 % mod;
  for (int i = 0; i <= m + k; i++) {
    (ans += C(n + i - 1, n - 1) * pw[m + k - i] % mod * j % mod) %= mod;
    if (i < k)
      (j <<= 1) %= mod;
    else if (i >= m)
      (j += j - C(i, k) + mod - C(i, m) + mod) %= mod;
    else
      (j += j - C(i, k) + mod) % mod;
  }
  printf("%lld\n", ans);
  return 0;
}
