// Created by Priyanshu

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>

// using namespace __gnu_pbds;
using namespace std;

#define M                    1000000007
#define pi                   3.14159265358979323846
#define ll                   long long
#define lld                  long double

// Pair
#define pii                  pair<int, int>
#define pll                  pair<ll, ll>

// Vector
#define vl                   vector<ll >
#define vi                   vector<int>
#define vpi                  vector<pii>
#define vpl                  vector<pll>
#define pb                   push_back
#define mp                   make_pair


// Search
#define lb                   lower_bound
#define ub                   upper_bound
#define mina                 *min_element
#define mama                 *max_element
#define bsrch                binary_search


////////
#define F                    first
#define S                    second
#define cel(x,a)             (((x) + (a) - 1) / (a))
#define all(v)               v.begin(), v.end()
#define countofbits(n)       __builtin_popcountll(n)
#define lcm(m, n)            (((m) / __gcd((m), (n)))*(n))
#define oset                 tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define deb(...)             cout << "(" << #__VA_ARGS__ << "):", dbg(__VA_ARGS__)
#define ms(arr, v)           memset(arr, v, sizeof(arr))
#define pf(x,y)              setfill('x')<<setw(y)
#define ps(x,y)              fixed << setprecision(y) << x
#define _X_                  ios_base::sync_with_stdio(false); cin.tie(NULL)


///////////////////////////////

int II;
long long I_O;
char CC, SS[20];
const int N = 1e5 + 4;

///////////////////////////////


// Input / Output
#define scn(str)             scanf("%s", str)
#define pri(str)             printf("%s\n", str)
#define inp(a, n)            for(int Ele=0; Ele<(n); Ele++)a[Ele]=read()
#define inp1(a, n)           for(int Ele=1; Ele<=(n); Ele++)a[Ele]=read()
inline  ll  read()           { II = 1, I_O = 0; while (!isdigit(CC = getchar())) if (CC == '-') II = -1; while (isdigit(CC)) I_O = I_O * 10 + CC - '0', CC = getchar(); return I_O * II;}
inline void wonl()           { putchar('\n');}
inline void  wws()           { }
inline void  dbg()           { cout << endl; }
inline void ww(ll k)         { if (k < 0) putchar('-'), k *= -1; II = 0; while (k)SS[++II] = k % 10, k /= 10; if (!II) SS[++II] = 0; while (II)putchar(SS[II--] + '0');}
inline void ww(pll p)        { ww(p.F), putchar(' '), ww(p.S); }


// bool sortbysec(const pair<int, int> &a, const pair<int, int> &b) {return (a.S < b.S);}

// struct compare {
//     bool operator()(const pair<int, int>& value, const int& key) {return (value.F < key);}
//     bool operator()(const int& key, const pair<int, int>& value) {return (key < value.F);}
// };




template <typename T, typename... V>
inline void wonl(T t, V... v) {ww(t); if (sizeof...(v))putchar(' '); wonl(v...);}


template <typename T, typename... V>
inline void  wws(T t, V... v) {ww(t); putchar(' '); wws(v...);}


template <typename T, typename... V>
inline void  dbg(T t, V... v) {cout << ' ' << t; dbg(v...);}


// always type cast before using v.size()


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////













void solve() {




    int ar[3];
    inp(ar, 3);
    sort(ar, ar + 3);


    wonl(ar[1] + ar[2]);







}












int main()
{
    // _X_;
    // clock_t time_req = clock();



    solve();


    // time_req = clock() - time_req;
    // cout << (float)time_req / CLOCKS_PER_SEC;
    return 0;
}
#include <bits/stdc++.h>
#include <math.h>
using namespace std;

int main()
{
    int a, b, c, Max1, Max2;
    cin >> a >> b >> c;
    Max1 = max(a+b, b+c);
    Max2 = max(c+a, Max1);
    cout << Max2 << endl;
}