#include <bits/stdc++.h>
using namespace std;
void swap(long long int& a, long long int& b) {
  long long int temp = a;
  a = b;
  b = temp;
}
inline long long int maxim(long long int a, long long int b) {
  if (a > b)
    return a;
  else
    return b;
}
inline long long int minim(long long int a, long long int b) {
  if (a < b)
    return a;
  else
    return b;
}
inline bool equals(double a, double b) { return fabs(a - b) < 1e-9; }
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long int modpow(long long int b, long long int e) {
  long long int ans = 1;
  for (; e; b = b * b % 1000000007, e /= 2)
    if (e & 1) ans = ans * b % 1000000007;
  return ans;
}
map<string, long long int> m;
bool comp(pair<long long int, long long int> a,
          pair<long long int, long long int> b) {
  if (a.first < b.first) {
    return true;
  } else if (a.first > b.first) {
    return false;
  } else {
    return a.second < b.second;
  }
}
bool check(string x, string y, long long int m) {
  for (long long int i = (0), _b = (m - 1); i <= _b; i++)
    if (x[i] == y[m - 1 - i]) {
    } else {
      return false;
    }
  return true;
}
long long int table[101];
int main() {
  cin.tie(NULL);
  cout.tie(NULL);
  ios_base::sync_with_stdio(false);
  cout << setprecision(10) << fixed;
  long long int d[3];
  for (long long int o = 0, _n = (3); o < _n; o++) {
    cin >> d[o];
  }
  sort(d, d + 3);
  if (d[2] >= 2 * (d[0] + d[1]))
    cout << d[0] + d[1] << endl;
  else
    cout << (d[0] + d[1] + d[2]) / 3 << endl;
  return 0;
}
