#include<bits/stdc++.h>
using namespace std;
const int maxn=900003,mod=1000000007;
int Plus(int x,int y){return (x+=y)>=mod?x-mod:x;}
void Pluseq(int &x,int y){if((x+=y)>=mod)x-=mod;}
int Minus(int x,int y){return Plus(x,mod-y);}
void Minuseq(int &x,int y){Pluseq(x,mod-y);}
int mul(long long x,int y){return x*y%mod;}
void muleq(int &x,int y){x=mul(x,y);}
int qpow(int x,int y){
    int ans=1;
    while(y){
        if(y&1)muleq(ans,x);
        muleq(x,x);
        y>>=1;
    }
    return ans;
}
int p3[maxn],fac[maxn],facinv[maxn],f[maxn];
int C(int n,int m){return n<m?0:mul(mul(fac[n],facinv[m]),facinv[n-m]);}
int main(){
    p3[0]=fac[0]=1;
    for(int i=1;i<maxn;i++)p3[i]=mul(p3[i-1],3),fac[i]=mul(fac[i-1],i);
    facinv[maxn-1]=qpow(fac[maxn-1],mod-2);
    for(int i=maxn-2;i>=0;i--)facinv[i]=mul(facinv[i+1],i+1);
    int n,m,k,ans=0;
    scanf("%d%d%d",&n,&m,&k);
    if(m>k)swap(m,k);
    f[n]=1;
    for(int i=n+1;i<=n+m;i++)f[i]=mul(2,f[i-1]);
    for(int i=n+m+1;i<=n+k;i++)f[i]=Minus(mul(2,f[i-1]),C(i-n-1,m));
    for(int i=n+k+1;i<=n+m+k;i++)f[i]=Minus(mul(2,f[i-1]),Plus(C(i-n-1,i-n-k-1),C(i-n-1,m)));
    for(int i=n;i<=n+m+k;i++)Pluseq(ans,mul(mul(C(i-1,n-1),f[i]),p3[n+m+k-i]));
    printf("%d\n",ans);
    return 0;
}