#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int prevId(int last, int result)
{
if(last == result)
return last;
return 3 - last - result;
}
const int N = 1001;
int dpPrev[N][N][3];
int dp[N][N][3];
int main()
{
int cnt_a, cnt_b, cnt_c;
cin >> cnt_a >> cnt_b >> cnt_c;
for(int cntA = 0; cntA <= cnt_a; cntA++)
{
for(int cntB = 0; cntB <= cnt_b; cntB++)
{
for(int cntC = 0; cntC <= cnt_c; cntC++)
{
if(cntA + cntB + cntC == 0)
continue;
if(cntA + cntB + cntC == 1)
{
if(cntA == 1)
dp[cntB][cntC][0] = 1;
if(cntB == 1)
dp[cntB][cntC][1] = 1;
if(cntC == 1)
dp[cntB][cntC][2] = 1;
continue;
}
for(int result = 0; result < 3; result++)
{
if(cntA > 0)
dp[cntB][cntC][result] = (dp[cntB][cntC][result] + dpPrev[cntB][cntC][prevId(0, result)]) % mod;
if(cntB > 0)
dp[cntB][cntC][result] = (dp[cntB][cntC][result] + dp[cntB - 1][cntC][prevId(1, result)]) % mod;
if(cntC > 0)
dp[cntB][cntC][result] = (dp[cntB][cntC][result] + dp[cntB][cntC - 1][prevId(2, result)]) % mod;
}
}
}
for(int cntB = 0; cntB <= cnt_b; cntB++)
{
for(int cntC = 0; cntC <= cnt_c; cntC++)
{
for(int result = 0; result < 3; result++)
{
dpPrev[cntB][cntC][result] = dp[cntB][cntC][result];
dp[cntB][cntC][result] = 0;
}
}
}
}
cout << dpPrev[cnt_b][cnt_c][2] << "\n";
return 0;
}