Here is one way to label each line. You could also make a special data frame to contain the labeling data and use that as the data argument of geom_label.
library(ggplot2)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
DF <- data.frame(Time = seq(0,24,2),
conc= c(0, 9, 7, 6, 5.5, 5, 4, 3.75, 3.5, 2.75,2.5, 2.25, 2,
0, 8, 7.5, 6, 5, 4.75, 4.5, 3.2, 2.75, 2.25, 2.05, 1.5, 1.03,
0, 10, 9.5, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0.25),
Dose = rep(c(3.1, 4.4, 5.5), each = 13))
DF <- mutate(DF, Label = ifelse(Time == 24, Dose, NA),
Dose = as.character(Dose))
ggplot(data = DF, aes(Time, conc, group = Dose)) +
geom_line(aes(color = Dose), size = 1.2) +
geom_label(aes(label = Label), nudge_x = 0.35, size = 4)
#> Warning: Removed 36 rows containing missing values (geom_label).

Created on 2020-06-25 by the reprex package (v0.3.0)