// Why all solutions are wrong?
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N=9e5+5,mo=1e9+7;

typedef long long LL;

int n,m,K,ans,Fac[N],Inv[N],p[N];

int C(int n,int m)
{
    return (LL)Fac[n]*Inv[m]%mo*Inv[n-m]%mo;
}

int main()
{
    p[0]=Fac[0]=Inv[0]=Fac[1]=Inv[1]=1; p[1]=3;
    for (int i=2;i<N;i++) Inv[i]=(LL)Inv[mo%i]*(mo-mo/i)%mo;
    for (int i=2;i<N;i++)
    {
        p[i]=p[i-1]*3ll%mo; Fac[i]=(LL)Fac[i-1]*i%mo; Inv[i]=(LL)Inv[i-1]*Inv[i]%mo;
    }
    scanf("%d%d%d",&n,&m,&K); n--;
    if (m<K) swap(m,K);
    for (int i=0,j=1;i<=m+K;i++)
    {
        ans=(ans+(LL)C(n+i,n)*p[m+K-i]%mo*j)%mo;
        if (i<K) j=j*2%mo;
        else if (i>=m) j=(j*2ll-C(i,K)-C(i,i-m))%mo;
        else j=(j*2ll-C(i,K))%mo;
    }
    if (ans<0) ans+=mo;
    printf("%d\n",ans);
    return 0;
}