Find all functions $f: \mathbb R^+ \rightarrow \mathbb R^+$ satisfying the following condition: for any three distinct real numbers $a,b,c$, a triangle can be formed with side lengths $a,b,c$, if and only if a triangle can be formed with side lengths $f(a),f(b),f(c)$.
1. **Step 1: Prove that \( f \) is injective.**

   *Proof:* Suppose \( f(x) = f(y) \) for \( x < y \). Then \( f(a), f(b), f(x) \) are good if and only if \( f(a), f(b), f(y) \) are good, so \( a, b, x \) are good if and only if \( a, b, y \) are good for any \( a, b \). Taking \( a = \frac{x}{2} + \varepsilon \) and \( b = \frac{x}{2} \) for arbitrarily small \( \varepsilon \) gives \( a + b = x + \varepsilon > x \) so \( a, b, x \) are good, but \( a + b = x + \varepsilon < y \) so \( a, b, y \) are bad, a contradiction. Therefore, \( f \) is injective.

2. **Step 2: Prove that \( f \) is strictly increasing.**

   *Proof:* Suppose for the sake of contradiction that there exists \( a > b \) such that \( f(a) < f(b) \) - call such a pair *decreasing*. By choosing \( c = \frac{a + b}{2} \), if \( f(a) < f(c) \), then \( a, c \) are a decreasing pair with half the difference. Similarly, if \( f(a) > f(c) \), then \( f(c) < f(a) < f(b) \) so \( b, c \) are a decreasing pair with half the difference. Repeating this allows us to choose a decreasing pair \( a, b \) with an arbitrarily small value of \( a - b \).

   Now, choose \( m, n \) such that \( a - b < m, n < b < m + n < a \) (such a pair exists since \( a - b \) can be made arbitrarily small). Without loss of generality, assume \( f(m) > f(n) \). Then, \( m, n, b \) are good but \( m, n, a \) are bad. Therefore,
   \[
   f(m) + f(n) > f(b) > f(a) \quad \text{and} \quad f(m) - f(n) < f(b)
   \]
   in order for \( f(m), f(n), f(b) \) to be good. For \( f(m), f(n), f(a) \) to be bad, we must have \( f(n) + f(a) \leq f(m) \), so \( f(a) \leq f(m) - f(n) < f(b) \).

   We can now choose arbitrarily many real numbers \( m_1, m_2, \ldots, m_k \) with \( f(m_1) < f(m_2) < \ldots < f(m_k) \) such that for any \( i \neq j \), we have \( a - b < m_i, m_j < b < m_i + m_j < a \). This means that \( f(m_{i+1}) - f(m_i) \geq f(a) \) and \( f(m_k) - f(m_1) < f(b) \). By choosing \( k \) such that \( kf(a) > f(b) \), we have
   \[
   f(b) > f(m_k) - f(m_1) = (f(m_k) - f(m_{k-1})) + \ldots + (f(m_2) - f(m_1)) \geq kf(a) > f(b)
   \]
   a contradiction. Therefore, \( f \) is strictly increasing.

3. **Step 3: Prove that there exists \( x \) such that \( f(x) \) is arbitrarily small.**

   *Proof:* Suppose for the sake of contradiction that \( f(x) > c \) for all \( x \), for some constant \( c > 0 \). First, substitute \( x, y, x + y \) for distinct \( x, y \) to see that \( f(x + y) \geq f(x) + f(y) \) for distinct \( x, y \) because \( x, y, x + y \) are bad so \( f(x), f(y), f(x + y) \) are bad and \( f \) is strictly increasing. Then choose \( x, y \) where \( y - x = z > 0 \). Let \( f(y) - f(x) = t \) and choose an arbitrarily large integer \( k \) such that \( kc > t \). We consider numbers \( z_1 < z_2 < \ldots < z_k \) such that \( z_1 + z_2 + \ldots + z_k = z \). Then
   \[
   f(x) + t = f(y) \geq f(x) + f(z) \geq f(x) + f(z_1) + f(z_2) + \ldots + f(z_k) \geq f(x) + kc > f(x) + t
   \]
   by an inductive argument, a contradiction. Therefore, such \( c > 0 \) does not exist, so arbitrarily small \( f(x) \) do exist.

4. **Step 4: Prove that \( f \) is continuous.**

   *Proof:* It suffices to show that for any \( a \) and \( c \), there exists \( b \) such that \( |f(x) - f(c)| < a \) for all \( x \) such that \( |x - c| < b \). To do this, choose \( b \) such that \( f(b) < a \) and \( b < c \) which exists since \( f \) is strictly increasing. Then, since \( x, b, c \) are good, then \( f(x), f(b), f(c) \) are good, so \( |f(x) - f(c)| < f(b) < a \), as desired.

5. **Step 5: Prove that \( f(x) = cx \) for some constant \( c > 0 \).**

   *Proof:* Suppose \( f(a + b) > f(a) + f(b) \). Then since \( a + b - \varepsilon, a, b \) are good for any \( \varepsilon > 0 \), \( f(a + b - \varepsilon) < f(a) + f(b) \). Then there is no value of \( x \) such that \( f(x) = f(a) + f(b) \), a contradiction by the Intermediate Value Theorem since \( f(a + b) > f(a) + f(b) \) and \( f(a + b - \varepsilon) < f(a) + f(b) \) and \( f \) is continuous. Therefore, \( f(a + b) = f(a) + f(b) \) for any \( a, b \). By Cauchy's functional equation, since \( f(x) > 0 \) for all \( x \), we have that \( f(x) = cx \) for some constant \( c > 0 \). Evidently, \( x, y, z \) form a triangle if and only if \( cx, cy, cz \) form a triangle, so the only solution is \( f(x) = cx \).

The final answer is \( \boxed{ f(x) = cx } \) for some constant \( c > 0 \).