#include <bits/stdc++.h>
using namespace std;
const int N = 9e5+20 , Mod = 1e9+7;
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; }
inline void Add(int &a,int b) { a = add( a , b ); }
inline void Sub(int &a,int b) { a = sub( a , b ); }
inline void Mul(int &a,int b) { a = mul( a , b ); }
inline int quickpow(int a,int b) { int res = 1; for (;b;Mul(a,a),b>>=1) if ( 1 & b ) Mul(res,a); return res; }
int n,m,k,fac[N],inv[N],Pow3[N],ans;
inline void init(void)
{
    fac[0] = inv[0] = Pow3[0] = 1;
    for (int i=1;i<=n+m+k;i++)
        fac[i] = mul( fac[i-1] , i ) , Pow3[i] = mul( Pow3[i-1] , 3 );
    inv[n+m+k] = quickpow( fac[n+m+k] , Mod-2 );
    for (int i=n+m+k-1;i>=1;i--)
        inv[i] = mul( inv[i+1] , i+1 );
}
inline int C(int n,int m)
{
    if ( n < m || m < 0 || n < 0 ) return 0;
    return mul( fac[n] , mul( inv[m] , inv[n-m] ) );
}
inline int getval(void)
{
    int res = 0;
    for (int i=0;i<=m;i++) Add( res , C(k,i) );
    return res;
}
inline void solve(void)
{
    int val = 1;
    for (int i=0;i<=m+k;i++)
    {
        Add( ans , mul( mul( C(i+n-1,n-1) , Pow3[m+k-i] ) , val ) );
        if ( i < k ) Mul( val , 2 );
        else if ( i < m ) val = sub( mul( val , 2 ) , C(i,k) );
        else val = sub( mul( val , 2 ) , add( C(i,m) , C(i,k) ) );
    }
}
int main(void)
{
    scanf("%d%d%d",&n,&m,&k);
    if ( k > m ) swap( k , m );
    init();
    solve();
    printf("%d\n",ans);
    return 0;
}
