#include<bits/stdc++.h>
using namespace std;
#define ps push_back
#define mk make_pair
#define ll long long int 

const int dig=1e5+7;      

void solve()
{
   vector<int> a(3);
   cin>>a[0]>>a[1]>>a[2];
   sort(a.begin(),a.end());
   cout<<a[1]+a[2]<<endl;
     
}
        
         
        
int main()  
{ 
    ios_base::sync_with_stdio(false);
cin.tie(NULL);
     int t=1;
     //cin>>t;
     while(t--)
     {
    solve();    
      }
     return 0;
    }   
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned long long int
#define pb push_back
#define mod 1000000007
#define PI 3.1415926535897932384626433832795
#define lb lower_bound
#define ub upper_bound
#define endl '\n'
#define um unordered_map
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define double long double
#define fast_fast_kardo_ji ios_base::sync_with_stdio(false); cin.tie(NULL);

/////////Quick Functions start////////////////////////////////
bool comp(pair<int,int> a, pair<int,int> b){
	if(a.ss==b.ss)return a.ff<b.ff;
	return a.ss<b.ss;
}
struct myComp {
    constexpr bool operator()(pair<int, pii> const& a,pair<int, pii> const& b)
        const noexcept
    {
    	if(a.ff==b.ff)return a.ss.ff>b.ss.ff;
        return a.ff < b.ff;
    }
};

int gcd(int a, int b){
	if (b == 0) return a;
	return gcd(b, a % b);
}
 
int power(int a,int n){
	int res=1;
	while(n>0){
		if(n%2!=0){res*=a;n-=1;res%=mod;}
		else{a*=a;n/=2; a%=mod;}
	}
	return res;
}
 
bool isPrime(int n){
	// 6k+i (i=-1,0,1,2,3....)
	if (n <= 1)return false; 
	if (n <= 3)return true; 
	if (n%2 == 0 || n%3 == 0) return false; 
	for (int i=5; i*i<=n; i=i+6) {
		if (n%i == 0 || n%(i+2) == 0) 
			{return false;}
	}
	return true; 
}
 
int primeFactors(int n){
	int count=0;
	while (n % 2 == 0){count+=1;n = n/2;}
	for (int i = 3; i <= sqrt(n); i = i + 2){
		while (n % i == 0){
			count+=1;
			n = n/i;
		}
	}
	if (n > 2){count+=1;}
	return count;
}
 
map<int,bool> printDivisors(int n){
	map<int,bool> mp;
	for (int i=1; i<=sqrt(n); i++){
		if(n%i == 0){
		if(n/i == i) mp[i]=true;
		else {mp[(i)]=true;mp[(n/i)]=true;}
		}
	}
	return mp;
} 

 
void create_sparse_table(int n,vector<int> &v){
	// k=log2(n) -> n=size of the input array (for as large as 10^7, k is at max 25)
	int k=(int)log2(n*1.0);
	vector<vector<int>> st(n+1, vector<int> (k+1,0));
	for (int i = 0; i < n; i++)st[i][0] = v[i];
	for (int j = 1; j <= k; j++){
		for (int i = 0; i + (1 << j) <= n; i++)
			st[i][j] = min(st[i][j-1], st[i + (1 << (j - 1))][j - 1]);
	}
	//To make queries
	// int range = log2(R - L + 1);
	// int minimum = min(st[L][range], st[R - (1 << range) + 1][range]);
	return;
}
 
// vector<int> fact(200002,1);
// void preNCR(){
// 	for(int i=2;i<200002;i++){
// 		fact[i]=(fact[i-1]*i)%mod;
// 	}
// 	return;
// }
 
// int ncr(int n,int r){
// 	//call preNCR at start in main
// 	if(r>n){return 0;}
// 	int res=fact[n];
// 	// cout<<r<<endl;
// 	res*=(power(fact[r],mod-2)%mod);res%=mod;
// 	res*=(power(fact[n-r],mod-2)%mod);res%=mod;
// 	return res;
// }

void yes(){cout<<"YES"<<endl;}
void no(){cout<<"NO"<<endl;}
void alice(){cout<<"Alice"<<endl;}
void bob(){cout<<"Bob"<<endl;}
// vector<int> parent(200001,0);
 
// int amortize(int x){
// 	if(parent[x]==x)return x;
// 	parent[x]=amortize(parent[x]);
// 	return parent[x];
// }
// void combine(int x,int y){
// 	int parent1=amortize(x), parent2=amortize(y);	
// 	parent[parent2]=parent1;
// }
 
//////////////Quick Functions End/////////////////////////////
/******* a+b=(a^b) + 2∗(a&b) *******/

void helper(int n){

	return;
}

signed main(){
	/////////////
	#ifndef ONLINE_JUDGE
	freopen("inputf.in","r",stdin);
	freopen("outputf.in","w",stdout);
	#endif
	/////////////
	fast_fast_kardo_ji
	/////////////
	// preNCR();
	// int t;
	// cin>>t;
	// while(t--){
		int a,b,c;cin>>a>>b>>c;
		cout<<max({a+b,b+c,a+c})<<endl;
		// vector<int> v(n,0);
		// for(int i=0;i<n;i++)cin>>v[i];
		// string s;cin>>s;
		// helper(n);
		// if(ans){cout<<"YES"<<endl;}
		// else{cout<<"NO"<<endl;}
	// }
	return 0;
}