#include using namespace std; #define int long long #define stoi stoll using pii=pair; using vi = vector; using vvi = vector; #define all(c) begin(c),end(c) #define rall(c) rbegin(c),rend(c) #define fore(x,c) for(auto &&x:c) #define rep(i,a,n) for(int i=a,i##len=(int)(n);i=a;--i) #define sz(c) ((int)c.size()) #define contains(c,x) (c.find(x)!=end(c)) #define inseg(l,x,r) ((l)<=(x)&&(x)<(r)) #define dump(...) #define pb push_back #define _ 0 const signed INF_=1001001001; const long long INF=1001001001001001001LL; const int DX[9]={0,1,0,-1,1,1,-1,-1,0},DY[9]={-1,0,1,0,-1,1,1,-1,0}; template ostream& operator<<(ostream &os,const vector &v) { for (auto i = begin(v); i != end(v); i++) os<<*i<<(i==end(v)-1?"":" ");return os;} template istream& operator>>(istream &is,vector &v) { for (auto i = begin(v); i != end(v); i++) is>>*i;return is;} template istream& operator>>(istream &is, pair &p) { is>>p.first>>p.second;return is;} template bool chmax(T &a,const U &b){return a bool chmin(T &a,const U &b){return a>b?a=b,1:0;} template void psum(T& c) {partial_sum(begin(c), end(c), begin(c));} template using heap=priority_queue,greater>; struct before_main_function { before_main_function() { cin.tie(nullptr); ios::sync_with_stdio(0); cout << setprecision(15) << fixed; // #define endl "\n" } } before_main_function; //------------------8<------------------------------------8<-------------------- void dump_impl(string s) { assert(s.empty()); } template void dump_impl(string s, const H &head, const T&... tail) { int par = 0; rep(i, 0, sz(s)) { char ch = s[i]; if (ch == ',' && par == 0) { cerr << " = " << head << ", "; dump_impl(s.substr(i + 1), tail...); return; } else { cerr << ch; if (ch == '(') par++; if (ch == ')') par--; } } } #ifdef dump #undef dump #endif #define dump(...) do { cerr << "\x1b[33;1m"; dump_impl(#__VA_ARGS__ ",", __VA_ARGS__); cerr << "\x1b[0m" << endl; } while (0) template class ModInt { public: ModInt() : v(0) {} ModInt(int x) : v((x+mod)%mod) {} int value() const {return v;} const ModInt operator+(const ModInt &r) const { return ModInt(this->v + r.v); } const ModInt operator-(const ModInt &r) const { return ModInt(this->v + mod - r.v); } const ModInt operator*(const ModInt &r) const { return ModInt(this->v * r.v); } const ModInt operator/(const ModInt &r) const { return (*this * (~r)); } const ModInt operator^(int k) const { return ModInt(bpow(this->v, k)); } const ModInt operator~() const { return ModInt(bpow(this->v, mod-2)); } bool operator==(const ModInt &r) const { return this->v == r.v; } bool operator!=(const ModInt &r) const { return this->v != r.v; } ModInt& operator+=(const ModInt &r) { return *this = *this + r; } ModInt& operator-=(const ModInt &r) { return *this = *this - r; } ModInt& operator*=(const ModInt &r) { return *this = *this * r; } ModInt& operator/=(const ModInt &r) { return *this = *this * (~r); } private: int v; int bpow(int a, int b) const { int ret = 1; while (b > 0) { if (b & 1) ret = (ret * a) % mod; a = (a * a) % mod; b >>= 1; } return ret; } }; using Mint = ModInt<1000000007>; ostream& operator<<(ostream &os,Mint v) { os< fact, fact_inv; Factorial(size_t size = MAX_N) : fact(size), fact_inv(size) { fact[0] = fact_inv[0] = 1; for (int i = 1; i < MAX_N; ++i) { fact[i] = fact[i - 1] * i; fact_inv[i] = ~fact[i]; } } Mint combination(int N, int R) { if (N < 0 || R < 0) return 0; if (N < R) return 0; return fact[N] * fact_inv[N - R] * fact_inv[R]; } static Mint bin_pow(Mint x, int p) { if (x.value() == 0) return x; Mint prod = 1; while (p > 0) { if (p & 1) prod *= x; x *= x; p >>= 1; } return prod; } }; signed main() { int a, b, c; cin >> a >> b >> c; int n = a + b + c; Factorial fact; vector sum(n + 1, 0); rep(y_len, b + c, n) { sum[y_len] = fact.combination((y_len - c) - 1, b - 1); } psum(sum); Mint ans = 0; rep(z_len, c, n - 1) { Mint tot = ((Mint(2) ^ (z_len - 1)) - Mint(1)); Mint way = fact.combination(z_len - 2, c - 2); Mint tmp = (Mint(2) ^ (z_len - 1)) * fact.combination(z_len - 1, c - 1) + tot * way; tmp *= sum[n - 1] - sum[z_len]; ans += tmp; } cout << ans.value() << endl; return 0; }