#include <bits/stdc++.h>
                                        #include<iostream>
                                        #include<cstdio>
                                        #include<vector>
                                        #include<queue>
                                        #include<map>
                                        #include<cstring>
                                        #include<string>
                                        #include <math.h>
                                        #include<algorithm>
                                    //    #include <boost/multiprecision/cpp_int.hpp>
                                        #include<functional>
                                #define int long long
                                        #define inf  1000000007
                                        #define pa pair<int,int>
                                        #define ll long long
                                        #define pal pair<double,pa>
                                        #define ppa pair<int,int>
                                        #define ppap pair<int,pa>
                                        #define ssa pair<string,int>
                                        #define  mp make_pair
                                        #define  pb push_back
                                        #define EPS (1e-10)
                                        #define equals(a,b) (fabs((a)-(b))<EPS)
                                  #define VI vector<int>
                                        using namespace std;
                                        
                                  class pas{
                                    	public:
                                    	int x,y;
                                    	pas(int x=0,int y=0):x(x),y(y) {}
                                    	pas operator + (pas p) {return pas(x+p.x,y+p.y);}
                                    	pas operator - (pas p) {return pas(x-p.x,y-p.y);}
                                    	pas operator * (int a) {return pas(x*a,y*a);}
                                    	pas operator / (int a) {return pas(x/a,y/a);}
                                    //	double absv() {return sqrt(norm());}
                                    	int norm() {return x*x+y*y;}
                                    	bool operator < (const pas &p) const{
                                   		return x != p.x ? x<p.x: y<p.y;
                                   	}
                                  //		bool operator < (const pas &p) const{
                                    //		return y != p.y ? y<p.y: x<p.x;
                                    //	}
                                    	bool operator == (const pas &p) const{
                                    		return x==p.x && y==p.y;
                                    	}
                                    };

int pr[500000],inv[500000];

int beki(int n,int r){
	if(r==0) return 1ll;
	if(r==1) return n%inf;
	if(r%2) return (n*beki(n,r-1))%inf;
	int e=beki(n,r/2);
	return (e*e)%inf;
}

int c(int n,int r){
	int w=pr[n];
	w*=inv[n-r];
	w%=inf;
	w*=inv[r];
	w%=inf;
	return w;
}

int as(int n,int r){
	if(r==0) return 1;
	int qr=c(n+r,r)+inf;
	qr -= c(n+r,r-1);
	qr%=inf;
	return qr;
	
}
         signed main(){
	
	int n,m,k;
         	pr[0]=1,inv[0]=1;
         	for(int i=1;i<500000;i++){
         		pr[i]=(i*pr[i-1])%inf;
         		inv[i]=beki(pr[i],inf-2);
         	}
         cin>>n>>m>>k;
         	int ans=0;
         	for(int d=0;d<=k;d++){
         		int l=k-d;
         		
         		int r=1;
         		r*=as(n+d,d);
         		r%=inf;
         		r*=as(m+l,l);
         		r%=inf;
         		r*=c(n+m+2*k,n+2*d);
         		r%=inf;
         		ans+=r;
         		ans%=inf;
         	}
         	cout<<ans<<endl;
           	return 0;
           }


Measured memory_bytes: 10904