#include <bits/stdc++.h>
#define ll long long 
using namespace std;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int a, b, c;
    cin >> a >> b >> c;
    cout << a + b + c - min(min(a, b), c) << endl;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define int long long
#define ordered_set tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update>
#define fastio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) 
#define ll long long
typedef unsigned long long ull;
#define f(i,a,n) for(int i=a;i<n;i++)
#define f1(i,a,n) for(int i=a;i<=n;i++)
#define fab(i,a,b) for(int i=a;i<=b;i++)
#define fr(i,a) for(int i=a;i>=0;i--)
#define sc second
#define ft first
typedef vector<int> vi;
typedef pair<int,int> pii;
typedef vector<pii> vpii;
#define mp make_pair
#define pb push_back
#define mod 1000000007
#define maxN 1000000
const int INF=1e18;
/*---------------------------------------------------------------------------------------------------------------------------*/
vector<ll> sieve(int n) {int*arr = new int[n + 1](); vector<ll> vect; for (int i = 2; i <= n; i++)if (arr[i] == 0) {vect.push_back(i); for (int j = 2 * i; j <= n; j += i)arr[j] = 1;} return vect;}
void google(int t) {cout << "Case #" << t << ": ";}
int mul_mod(int a,int b,int m){ a%m; b%m; return ((((a*b)%m)+m)%m);}
int mul_add(int a,int b,int m){ a%m; b%m; return ((((a+b)%m)+m)%m);}
int mul_sub(int a,int b,int m){ a%m; b%m; return ((((a-b)%m)+m)%m);}
bool cmp(pair<int,int> a,pair<int,int> b){if(a.ft+a.sc!=b.ft+b.sc) return a.ft+a.sc<b.ft+b.sc; return a.ft<b.ft;}
bool isPrime(int n){if(n==1 or n==0) return false; if(n==2 or n==3) return true; if(n%2==0 or n%3==0) return false; for(int i=5;i*i<=n;i+=6){if(n%i==0 or n%(i+2)==0)return false;}return true;}
int power(int base,int n,int modulo){int res=1; while(n){if(n&1)res=mul_mod(res,base,modulo); base=mul_mod(base,base,modulo);n>>1;} return res;}
int dig(int n){int cnt=0; while(n){cnt++; n>>1;} return cnt;}
bool isPalindrome(string s){int n=s.size(); int l=0,r=n-1; bool flag=true; while(l<r){ if(s[l]!=s[r]){flag=false;break;}l++;r--;}if(flag)return true; return false;}
/*---------------------------------------------------------------------------------------------------------------------------*/
void solve(){
    int a,b,c;
    cin>>a>>b>>c;
    int ans=max((a+b),(b+c));
    ans=max(ans,(a+c));
    cout<<ans;
}
int32_t main(){
    fastio();
    int tc=1;
    //scanf("%lld",&tc);
    //cin>>tc;
    //cin.get();
    while (tc--)
    {
        solve();
    }
   return 0; 
}   