#include <bits/stdc++.h>
using namespace std;

int main()
{
  int a, b, c;
  cin >> a >> b >> c;
  if (a + b >= a + c && a + b >= b + c)
  {
    cout << a + b;
  }
  else if (a + c >= a + b && a + c >= b + c)
  {
    cout << a + c;
  }
  else
  {
    cout << b + c;
  }
}

#include <iostream>
#include <bits/stdc++.h>
#define inf 1000000007
#define mod 1000000007
#define ll long long
#define fr first
#define sc second
#define mp make_pair
#define pb push_back
#define vll vector<ll>
using namespace std;

//fast I/O 
auto optimizer = []() {  // makes I/O fast
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  return 0;
}();

// Snippet for computing ncr and factorials
// All computations done modulo 'mod'
vll fact,ifact;
void compute_factorials(ll n)
{
    fact.resize(n+1);
    ifact.resize(n+1);
    fact[0]=1;ifact[0]=1;
    fact[1]=1;ifact[1]=1;
    vll inverse_of_number(n+1);
    inverse_of_number[0]=1;   // inverse is not 1 but taken for easy code
    inverse_of_number[1]=1;
    for(ll i=2;i<=n;i++)
    {
        inverse_of_number[i] = (inverse_of_number[mod % i] * (mod - (mod / i)) ) % mod;
        fact[i]=(fact[i-1]*i)%mod;
        ifact[i]=(ifact[i-1]*inverse_of_number[i])%mod;
    }
    return;
}
ll ncr(ll n,ll r)
{
    if(n<0 || r>n || r<0)
        return 0;
    ll ans=fact[n];
    ans=(ans*ifact[r])%mod;
    ans=(ans*ifact[n-r])%mod;
    return ans;
}

//DSU start ---
ll find_sets(vector<ll> &v, ll a){
    if(v[a] < 0){
        return a;
    }
    return v[a] = find_sets(v,v[a]);
}

void union_sets(vector<ll> &v, ll a, ll b){
    a = find_sets(v,a);
    b = find_sets(v,b);
    if(a != b){
        if(v[a] < v[b]){
            v[a] += v[b];
            v[b] = a;
        }
        else{
            v[b] += v[a];
            v[a] = b;
        }
    }
}

//---end DSU

//power mode where (x^y) % p is calculated in log (y) time
int power(ll x, ll y, ll p)  
{  
    int res = 1;
    x = x % p; 
    if (x == 0) return 0;
    while (y > 0)  
    {  
        if (y & 1)  
            res = (res*x) % p;  
        y = y>>1; // y = y/2  
        x = (x*x) % p;  
    }  
    return res;  
}

void print(vector<ll> &vect){
    for(auto num : vect){
        cout << num << " ";
    }
    cout << endl;
}

void printll(vector<vector<ll>> &vect){
    for(auto num : vect){
        for(auto itr : num){
            cout << itr << " ";
        }
        cout << endl;
    }
}

//seive
ll N = 1e5;
vll lpf(N+1,0);
void leastPrimeFactor(){
    lpf[1] = 1;
    for (int i = 2; i <= N; i++){
        if(lpf[i] == 0){
            lpf[i] = i;
            for (int j = 2*i; j <= N; j += i){
                if (lpf[j] == 0){
                    lpf[j] = i;
                }
            }
        } 
    }
}

//Code -

int main() {
	ll n,i,j,t,m,temp,k,z;
    ll a,b,c;
    cin >> a >> b >> c;
    cout << max((a+b),max((b+c),(c+a)));
    return 0;
}