#include <bits/stdc++.h>
const int MAXN = 1e5 + 1, Mod = 1e9 + 7;
namespace Mathscalc {
inline int Add(int a, int b) { return a + b >= Mod ? a + b - Mod : a + b; }
inline int Sub(int a, int b) { return a - b < 0 ? a - b + Mod : a - b; }
inline int Mul(int a, int b) { return 1LL * a * b % Mod; }
}  // namespace Mathscalc
using namespace Mathscalc;
int n, m, k;
int jc[MAXN << 2], inv[MAXN << 2], invj[MAXN << 2], p[MAXN << 2];
void GetNeed() {
  p[0] = 1;
  for (int i = 1; i <= n * 3; ++i) p[i] = Mul(p[i - 1], 3);
  jc[0] = 1;
  for (int i = 1; i <= n * 3; ++i) jc[i] = Mul(jc[i - 1], i);
  inv[1] = 1;
  for (int i = 2; i <= n * 3; ++i)
    inv[i] = Mul(Sub(Mod, Mod / i), inv[Mod % i]);
  invj[0] = 1;
  for (int i = 1; i <= n * 3; ++i) invj[i] = Mul(invj[i - 1], inv[i]);
}
inline int C(int n, int m) { return Mul(jc[n], Mul(invj[m], invj[n - m])); }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  GetNeed();
  if (m < k) std ::swap(m, k);
  --n;
  int ans = 0, x = 1;
  for (int i = 0; i <= m + k; ++i) {
    ans = Add(ans, Mul(C(n + i, n), Mul(p[m + k - i], x)));
    if (i < k)
      x = Mul(x, 2);
    else if (i < m)
      x = Sub(Mul(x, 2), C(i, k));
    else
      x = Sub(Mul(x, 2), Add(C(i, m), C(i, k)));
  }
  printf("%d\n", ans);
  return 0;
}
