#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 600100;
const int mod = 1e9+7;
ll fac[maxn+100],inv[maxn+100],power[maxn+100];
int a,b,c;
ll comb(int a,int b)
{
return fac[a]*inv[b]%mod*inv[a-b]%mod;
}
ll comb(int a,int b,int c)
{
return fac[a+b+c]*inv[a]%mod*inv[b]%mod*inv[c]%mod;
}
int calc(int k)
{
int d = b - c;
int res=0;
for(int t1 = 0;2 * t1 + d <= k;t1++)
{
int t2 = t1 + d;
int t3 = k - t1 - t2;
if(c - t1 - t3 < 0) continue;
res = (res + comb(t1,t2,t3) * comb(c - t1 - t3 + k-1,k-1) % mod * power[t3] % mod)%mod;
}
return res;
}
ll solve(int a)
{
return ((2LL*calc(a)%mod + calc(a+1))%mod + calc(a-1))%mod;
}
int main()
{
fac[0]=1;
for(int i=1;i<=maxn;i++) {
fac[i]=fac[i-1]*i%mod;
}
inv[1]=1;
inv[0]=1;
for(int i=2;i<=maxn;i++) {
inv[i]=(mod-(mod/i)*inv[mod%i]%mod)%mod;
}
for(int i=1;i<=maxn;i++) {
inv[i]=inv[i-1]*inv[i]%mod;
}
power[0]=1;
for(int i=1;i<=maxn;i++) {
power[i]=(power[i-1]*2)%mod;
}
while(cin>>a>>b>>c)
{
if(a<c) swap(a,c);
if(a<b) swap(a,b);
if(b<c) swap(b,c);
std::cout << solve(a) << '\n';
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7Cgpjb25zdCBpbnQgbWF4biA9IDYwMDEwMDsKY29uc3QgaW50IG1vZCA9IDFlOSs3OwoKbGwgZmFjW21heG4rMTAwXSxpbnZbbWF4bisxMDBdLHBvd2VyW21heG4rMTAwXTsKCmludCBhLGIsYzsKCmxsIGNvbWIoaW50IGEsaW50IGIpCnsKICAgIHJldHVybiBmYWNbYV0qaW52W2JdJW1vZCppbnZbYS1iXSVtb2Q7Cn0KbGwgY29tYihpbnQgYSxpbnQgYixpbnQgYykKewogICAgcmV0dXJuIGZhY1thK2IrY10qaW52W2FdJW1vZCppbnZbYl0lbW9kKmludltjXSVtb2Q7Cn0KaW50IGNhbGMoaW50IGspCnsKICAgIGludCBkID0gYiAtIGM7CiAgICBpbnQgcmVzPTA7CiAgICBmb3IoaW50IHQxID0gMDsyICogdDEgKyBkIDw9IGs7dDErKykKICAgIHsKICAgICAgICBpbnQgdDIgPSB0MSArIGQ7CiAgICAgICAgaW50IHQzID0gayAtIHQxIC0gdDI7CiAgICAgICAgaWYoYyAtIHQxIC0gdDMgPCAwKSBjb250aW51ZTsKICAgICAgICByZXMgPSAocmVzICsgY29tYih0MSx0Mix0MykgKiBjb21iKGMgLSB0MSAtIHQzICsgay0xLGstMSkgJSBtb2QgKiBwb3dlclt0M10gJSBtb2QpJW1vZDsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KbGwgc29sdmUoaW50IGEpCnsKICAgIHJldHVybiAoKDJMTCpjYWxjKGEpJW1vZCArIGNhbGMoYSsxKSklbW9kICsgY2FsYyhhLTEpKSVtb2Q7Cn0KaW50IG1haW4oKQp7CiAgICBmYWNbMF09MTsKICAgIGZvcihpbnQgaT0xO2k8PW1heG47aSsrKSB7CiAgICAgIGZhY1tpXT1mYWNbaS0xXSppJW1vZDsKICAgIH0KICAgIGludlsxXT0xOwogICAgaW52WzBdPTE7CiAgICBmb3IoaW50IGk9MjtpPD1tYXhuO2krKykgewogICAgICBpbnZbaV09KG1vZC0obW9kL2kpKmludlttb2QlaV0lbW9kKSVtb2Q7CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1tYXhuO2krKykgIHsKICAgICAgaW52W2ldPWludltpLTFdKmludltpXSVtb2Q7CiAgICB9CiAgICBwb3dlclswXT0xOwogICAgZm9yKGludCBpPTE7aTw9bWF4bjtpKyspIHsKICAgICAgcG93ZXJbaV09KHBvd2VyW2ktMV0qMiklbW9kOwogICAgfQogICAgd2hpbGUoY2luPj5hPj5iPj5jKQogICAgewogICAgICAgIGlmKGE8Yykgc3dhcChhLGMpOwogICAgICAgIGlmKGE8Yikgc3dhcChhLGIpOwogICAgICAgIGlmKGI8Yykgc3dhcChiLGMpOwogICAgICAgIHN0ZDo6Y291dCA8PCBzb2x2ZShhKSA8PCAnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0=