#include<bits/stdc++.h>
#define pi 3.1415926535897932384626
using namespace std;
      
struct P{
  int x,y;
  bool operator < (const P &a )const{
    //if(y!=a.y)
    return y>a.y;
  };
};

int a,b,c,d,i,k,n,m,e,dx[10]={1,0,-1,0,1,1,-1,-1},dy[10]={0,1,0,-1,1,-1,1,-1};
long long o[1200511],re[1001011];
long long l[1000101];
int j[1];

long long x,y,z,mod=1000000007;
//string r;
char r[3331];

P u[1];
queue<int> q;
//stack<int> s;
set<int> s;
map<long long,int> p;

vector<int> v[1];

bool as(P a,P b)
{
  //if(a.x!=b.x)
  //return a.x<b.x;
  return a.x<b.x;
}

long long po(long long x,long long y)
{
  long long p=1;
  for(;y;x*=x,x%=mod,y/=2)
    if(y%2)p*=x,p%=mod;
  return p;
}

long long f(int n,int m)
{
  if(n<m) return 0;
  return o[n]*re[m]%mod*re[n-m]%mod;
}

int main()
{
  o[0]=re[0]=l[0]=1;
  for(int t=1;t<=1000000;t++)
    o[t]=o[t-1]*t%mod,l[t]=l[t-1]*3%mod,re[t]=po(o[t],mod-2);
  scanf("%d %d %d",&a,&b,&c);
  if(b>c) swap(b,c);
  y=1;
  x=l[b+c];
  for(int t=1;t<=b+c;t++)
  {
    if(t<=b) y*=2,y%=mod,x+=f(a+t-1,a-1)*y%mod*l[b+c-t]%mod;
    else if(t<=c)
    {
      y=y*2-f(t-1,b)+mod;
      y%=mod;
      x+=f(a+t-1,a-1)*y%mod*l[b+c-t]%mod;
    }
    else
    {
      y=y*2-f(t-1,b)-f(t-1,c)+mod*2;
      y%=mod;
      x+=f(a+t-1,a-1)*y%mod*l[b+c-t]%mod;
    }
    x%=mod;
    //printf("%lld %lld\n",x,y);
  }
  printf("%lld",x);
}
//0
//13


